Чтобы сделать этот вопрос ответственным, давайте предположим, что цена неоднозначности в уме программиста намного дороже, чем несколько дополнительных нажатий клавиш.
Учитывая , что, почему бы я , чтобы мои товарищи по команде , чтобы уйти с не аннотирования их параметры функции? Возьмем следующий код в качестве примера того, что может быть гораздо более сложным фрагментом кода:
let foo x y = x + y
Теперь быстрая проверка подсказки покажет вам, что F # определил, что вы хотите, чтобы x и y были целыми числами. Если это то, что вы намеревались, то все хорошо. Но я не знаю, хотел ли ты этого. Что если бы вы создали этот код для объединения двух строк вместе? Или что, если я думаю, что вы, вероятно, хотели добавить двойки? Или что, если мне просто не нужно наводить указатель мыши на каждый параметр функции, чтобы определить его тип?
Теперь возьмем это в качестве примера:
let foo x y = "result: " + x + y
F # теперь предполагает, что вы, вероятно, намеревались объединить строки, поэтому x и y определены как строки. Однако, как бедняга, который поддерживает ваш код, я мог бы взглянуть на это и подумать, возможно, вы намеревались добавить x и y (целые числа) вместе, а затем добавить результат в строку для целей пользовательского интерфейса.
Конечно, для таких простых примеров можно было бы отпустить, но почему бы не применить политику явной аннотации типов?
let foo (x:string) (y:string) = "result: " + x + y
Какой вред в том, чтобы быть однозначным? Конечно, программист мог выбрать неправильные типы для того, что он пытается сделать, но, по крайней мере, я знаю, что они этого хотели, что это был не просто недосмотр.
Это серьезный вопрос ... Я все еще очень плохо знаком с F # и прокладываю путь для моей компании. Стандарты, которые я принимаю, вероятно, станут основой для всего будущего кодирования F #, встроенного в бесконечное копирование, которое, я уверен, будет проникать в культуру на долгие годы.
Итак ... есть ли в выводе F # что-то особенное, что делает его ценной функцией, позволяющей комментировать только при необходимости? Или опытные F # -еры имеют привычку аннотировать свои параметры для нетривиальных приложений?