この質問に答えられるようにするために、プログラマの心の中にある曖昧さのコストは、いくつかの余分なキーストロークよりもはるかに高価であると仮定しましょう。
それを考えると、なぜ私のチームメイトが機能パラメーターに注釈を付けないで逃げることができるのですか?はるかに複雑なコードの例として、次のコードをご覧ください。
let foo x y = x + y
これで、ツールチップを簡単に調べると、F#がxとyがintを意味すると判断したことがわかります。それがあなたが意図したものであるなら、すべては順調です。しかし、それがあなたが意図したものかどうかはわかりません。2つの文字列を連結するためにこのコードを作成した場合はどうなりますか?または、ダブルスを追加するつもりだったと思う場合はどうなりますか?または、すべての単一の関数パラメーターの上にマウスを置いてそのタイプを決定する必要がない場合はどうなりますか?
これを例として見てみましょう。
let foo x y = "result: " + x + y
F#では、おそらく文字列を連結することを想定しているため、xとyは文字列として定義されます。ただし、コードを保守している貧弱なシュマックとして、私はこれを見て、xとy(int)を一緒に追加し、UI目的のために文字列に結果を追加するつもりだったのではないかと思うかもしれません。
確かにこのような単純な例では手放すことができますが、明示的な型注釈のポリシーを強制しないのはなぜですか?
let foo (x:string) (y:string) = "result: " + x + y
明確であることにはどのような害がありますか?確かに、プログラマーは自分がやろうとしていることに対して間違ったタイプを選択する可能性がありますが、少なくとも私は彼らがそれを意図していたことを知っています。
これは深刻な質問です...私はまだF#が初めてであり、会社の道を切り開いています。私が採用する標準は、今後のF#コーディングの基礎となり、今後数年間、文化に浸透していくと確信している無限のコピーペーストに組み込まれます。
それで... F#の型推論に特別な何かがあり、それを保持する価値のある機能にし、必要な場合にのみ注釈を付けますか?または、専門のF#-ersは、自明ではないアプリケーションのパラメーターに注釈を付ける習慣をつけていますか?