Почему бы не аннотировать параметры функции?

Чтобы ответить на этот вопрос, предположим, что стоимость двусмысленности в сознании программиста намного дороже, чем несколько дополнительных нажатий клавиш.

Учитывая это, почему я позволил своим товарищам по команде уйти, не записывая свои параметры функции? Возьмите следующий код в качестве примера того, что может быть гораздо более сложным кодом:

let foo x y = x + y

Теперь быстрое изучение всплывающей подсказки покажет вам, что F # определил, что вы хотите, чтобы х и у были ints. Если это то, что вы хотели, то все в порядке. Но я не знаю, намерен ли он это делать. Что, если бы я создал этот код для объединения двух строк вместе? Или что, если я думаю, что вы, вероятно, хотели добавить двойники? Или что, если я просто не хочу наводить указатель мыши на каждый параметр функции, чтобы определить его тип? Подробнее про различные виды аннотаций читайте на страницах нашего https://primpress.ru/article/69085 специализированного сайта.

Теперь возьмите это в качестве примера:

let foo x y = "result: " + x + y

F # теперь предполагает, что вы, вероятно, намеревались объединить строки, поэтому х и у определяются как строки. Однако, как бедный придурок, который поддерживает ваш код, я мог бы посмотреть на это и спросить себя, может быть, я намеревался добавить х и у (ints), а затем добавить результат в строку для целей пользовательского интерфейса.

Конечно, для таких простых примеров можно отпустить, но почему бы не применить политику аннотации явного типа?

let foo (x:string) (y:string) = "result: " + x + y

Какой вред в том, чтобы быть однозначным? Конечно, программист может выбрать неправильные типы для того, что он пытается сделать, но, по крайней мере, я знаю, что они пытались, что это была не просто оплошность.

Это серьезный вопрос … Я все еще очень новичок в F # и прокладываю путь для своей компании. Стандарты, которые вы принимаете, вероятно, станут основой для всего будущего кодирования F#, встроенного в бесконечную вставку копий, которая, я уверен, пронизает культуру на долгие годы.

Итак … есть ли что-то особенное в выводе типов F#, что делает его ценной функцией для поддержания, забивая только тогда, когда это необходимо? Или у экспертов F # — ers есть привычка записывать свои параметры для нетривиальных приложений?