Aby odpowiedzieć na to pytanie, załóżmy, że koszt dwuznaczności w umyśle programisty jest znacznie droższy niż kilka dodatkowych naciśnięć klawiszy.
Biorąc to pod uwagę, dlaczego miałbym pozwalać moim kolegom z zespołu na ucieczkę bez adnotowania ich parametrów funkcji? Weź następujący kod jako przykład czegoś, co może być o wiele bardziej złożonym fragmentem kodu:
let foo x y = x + y
Teraz, szybkie sprawdzenie podpowiedzi pokaże, że F # ustaliło, że chciałeś, aby xiy były ints. Jeśli tak zamierzałeś, wszystko jest w porządku. Ale ja nie wiem, czy to, co zamierzałeś. Co jeśli utworzyłeś ten kod, aby połączyć dwa ciągi razem? A co jeśli myślę, że prawdopodobnie chciałeś dodać podwójne? A jeśli nie chcę po prostu najeżdżać myszką na każdy parametr funkcji, aby określić jej typ?
Teraz weź to jako przykład:
let foo x y = "result: " + x + y
F # zakłada teraz, że prawdopodobnie zamierzałeś łączyć łańcuchy, więc xiy są zdefiniowane jako łańcuchy. Jednak jako biedny schmuck, który utrzymuje Twój kod, mogę na to spojrzeć i zastanawiać się, czy być może nie chciałeś dodać x i y (int) razem, a następnie dołączyć wynik do ciągu dla celów interfejsu użytkownika.
Z pewnością w przypadku takich prostych przykładów można to odpuścić, ale dlaczego nie narzucić polityki wyraźnych adnotacji typu?
let foo (x:string) (y:string) = "result: " + x + y
Jaka jest szkoda w jednoznaczności? Pewnie, programista może wybrać niewłaściwe typy do tego, co próbują zrobić, ale przynajmniej wiem, że zamierzali to zrobić, że to nie był tylko przeoczenie.
To poważne pytanie ... Nadal jestem nowy na F # i wytyczam szlak dla mojej firmy. Standardy, które przyjmę, będą prawdopodobnie podstawą wszystkich przyszłych kodowań F #, osadzonych w nieskończonym kopiowaniu, które z pewnością przenikną do kultury przez wiele lat.
Więc ... czy jest coś specjalnego w wnioskowaniu typu F #, co czyni z niego cenną funkcję do trzymania, adnotację tylko w razie potrzeby? A może eksperci F # mają zwyczaj dodawania adnotacji do swoich parametrów w nie trywialnych zastosowaniach?