Para responder a esta pregunta, supongamos que el costo de la ambigüedad en la mente de un programador es mucho más costoso que unas pocas pulsaciones de teclas adicionales.
Dado eso, ¿por qué permitiría que mis compañeros de equipo se salgan sin anotar sus parámetros de función? Tome el siguiente código como ejemplo de lo que podría ser un código mucho más complejo:
let foo x y = x + y
Ahora, un examen rápido de la información sobre herramientas le mostrará que F # ha determinado que usted quiere que x e y sean ints. Si eso es lo que pretendías, entonces todo está bien. Pero yo no sé si eso es lo que pretende. ¿Qué pasaría si hubiera creado este código para concatenar dos cadenas juntas? ¿O qué pasa si creo que probablemente quisiste agregar dobles? ¿O qué pasa si simplemente no quiero tener que pasar el mouse sobre cada parámetro de función para determinar su tipo?
Ahora tome esto como un ejemplo:
let foo x y = "result: " + x + y
F # ahora supone que probablemente haya tenido la intención de concatenar cadenas, por lo que x e y se definen como cadenas. Sin embargo, como el pobre imbécil que mantiene su código, podría mirar esto y preguntarme si tal vez tenía la intención de agregar x e y (ints) y luego agregar el resultado a una cadena para fines de UI.
Ciertamente, para ejemplos tan simples, uno podría dejarlo ir, pero ¿por qué no aplicar una política de anotación de tipo explícito?
let foo (x:string) (y:string) = "result: " + x + y
¿Qué daño hay en ser inequívoco? Claro, un programador podría elegir los tipos incorrectos para lo que está tratando de hacer, pero al menos sé que lo intentaron, que no era solo un descuido.
Esta es una pregunta seria ... Todavía soy muy nuevo en F # y estoy abriendo el camino para mi compañía. Los estándares que adopte probablemente serán la base para toda la futura codificación F #, incrustada en el interminable pegado de copias que estoy seguro impregnará la cultura en los años venideros.
Entonces ... ¿hay algo especial en la inferencia de tipos de F # que lo convierte en una característica valiosa para mantener, anotando solo cuando sea necesario? ¿O los expertos F # -ers tienen la costumbre de anotar sus parámetros para aplicaciones no triviales?