Per rendere rispondibile a questa domanda, supponiamo che il costo dell'ambiguità nella mente di un programmatore sia molto più costoso di alcuni tasti in più.
Detto questo, perché dovrei permettere ai miei compagni di squadra di evitare di annotare i loro parametri di funzione? Prendi il seguente codice come esempio di quello che potrebbe essere un pezzo di codice molto più complesso:
let foo x y = x + y
Ora, un rapido esame del suggerimento ti mostrerà che F # ha determinato che intendevi che xey fossero ints. Se è quello che intendevi, allora va tutto bene. Ma io non so se è quello desiderato. E se avessi creato questo codice per concatenare due stringhe insieme? O se penso che probabilmente intendevi aggiungere un doppio? O se non volessi semplicemente passare il mouse su ogni singolo parametro di funzione per determinarne il tipo?
Ora prendi questo come esempio:
let foo x y = "result: " + x + y
F # ora presuppone che tu abbia probabilmente intenzione di concatenare le stringhe, quindi xey sono definite stringhe. Tuttavia, come il povero schmuck che sta mantenendo il tuo codice, potrei guardare questo e chiedermi se forse avevi intenzione di aggiungere insieme xey (ints) e quindi aggiungere il risultato a una stringa per scopi di interfaccia utente.
Certamente per esempi così semplici si potrebbe lasciar perdere, ma perché non applicare una politica di annotazione esplicita del tipo?
let foo (x:string) (y:string) = "result: " + x + y
Che male c'è nell'essere inequivocabile? Certo, un programmatore potrebbe scegliere i tipi sbagliati per quello che stanno cercando di fare, ma almeno so che lo intendevano, che non era solo una svista.
Questa è una domanda seria ... Sono ancora molto nuovo con F # e sto aprendo la strada per la mia compagnia. Gli standard che adotterò saranno probabilmente la base di tutti i futuri codici F #, integrati nell'infinito copia-incolla che sono sicuro che permetteranno alla cultura per gli anni a venire.
Quindi ... c'è qualcosa di speciale nell'inferenza del tipo di F # che la rende una caratteristica preziosa a cui aggrapparsi, annotando solo quando necessario? O i F # esperti hanno l'abitudine di annotare i loro parametri per applicazioni non banali?