Pour répondre à cette question, supposons que le coût de l'ambiguïté dans l'esprit d'un programmeur soit beaucoup plus cher que quelques frappes supplémentaires.
Compte tenu de cela, pourquoi laisserais-je mes coéquipiers s'en tirer sans annoter leurs paramètres de fonction? Prenez le code suivant comme exemple de ce qui pourrait être un morceau de code beaucoup plus complexe:
let foo x y = x + y
Maintenant, un examen rapide de l'info-bulle vous montrera que F # a déterminé que vous vouliez que x et y soient des entiers. Si c'est ce que vous vouliez, alors tout va bien. Mais je ne sais pas si c'est ce que vous vouliez. Et si vous aviez créé ce code pour concaténer deux chaînes ensemble? Et si je pense que vous vouliez probablement ajouter des doubles? Ou si je ne veux pas avoir à passer la souris sur chaque paramètre de fonction pour déterminer son type?
Prenons maintenant ceci comme exemple:
let foo x y = "result: " + x + y
F # suppose maintenant que vous avez probablement l'intention de concaténer des chaînes, donc x et y sont définis comme des chaînes. Cependant, en tant que pauvre schmuck qui gère votre code, je pourrais regarder cela et me demander si vous aviez peut-être l'intention d'ajouter x et y (ints) ensemble, puis d'ajouter le résultat à une chaîne à des fins d'interface utilisateur.
Certes, pour de tels exemples simples, on pourrait laisser tomber, mais pourquoi ne pas appliquer une politique d'annotation de type explicite?
let foo (x:string) (y:string) = "result: " + x + y
Quel mal y a-t-il à être sans ambiguïté? Bien sûr, un programmeur pourrait choisir les mauvais types pour ce qu'il essaie de faire, mais au moins je sais qu'ils le voulaient, que ce n'était pas seulement une erreur.
C'est une question sérieuse ... Je suis encore très nouveau sur F # et je trace la voie pour mon entreprise. Les normes que j'adopterai seront probablement la base de tout futur codage F #, intégré dans le copier-coller sans fin qui, j'en suis sûr, imprègnera la culture pour les années à venir.
Donc ... y a-t-il quelque chose de spécial dans l'inférence de type F # qui en fait une fonctionnalité précieuse à conserver, à annoter uniquement lorsque cela est nécessaire? Ou les experts F # ont-ils l'habitude d'annoter leurs paramètres pour des applications non triviales?