どこでも使用される前に関数を作成する場合、そのパラメーターに型注釈を追加すると便利です。これは、その値をオートコンプリートできることを意味し、(特に F# の初心者として) 予期しない型の推論によって混乱することはありません。
ただし、関数が終了すると、パラメーターの型注釈が醜いため、削除したくなります。これは合理的なことのように聞こえますか?
私が話している機能の種類に依存する可能性があると思います。たとえば、プライベート関数には意味がありますが、パブリック関数には意味がない場合があります。
どこでも使用される前に関数を作成する場合、そのパラメーターに型注釈を追加すると便利です。これは、その値をオートコンプリートできることを意味し、(特に F# の初心者として) 予期しない型の推論によって混乱することはありません。
ただし、関数が終了すると、パラメーターの型注釈が醜いため、削除したくなります。これは合理的なことのように聞こえますか?
私が話している機能の種類に依存する可能性があると思います。たとえば、プライベート関数には意味がありますが、パブリック関数には意味がない場合があります。
いろいろな要因によると思います。注釈を残すことを支持するいくつかの議論を次に示します。
ただし、一方で、それらを削除する説得力のある理由もいくつかあります。
価値のあることとして、私の個人的なスタイルは、fsi ファイルを使用してパブリック モジュール インターフェイスの注釈を維持し、fs モジュール実装ファイル内のほとんどの注釈を消去することです (左から右への型推論で必要な場合を除く)。このスキームでは、モジュール インターフェイスを変更することは大きな問題であり、その実装を変更することはそれほど重要ではありません。
いいえ、利点はありません。プログラムを後で変更しやすくしたり、見た目が良くなったりすると言えますが、実際にはうまくいきません。
ほとんどの場合、最初に注釈を追加したのとまったく同じ理由で、とにかく注釈を再入力することになります。
ここでの重要な議論は、型注釈を削除するとソースの意味が変わるということだと思います。
実際、ソースコードがあると仮定しましょう: let f (arg: MyType) = arg.ToString(). ソースはタイプ であることを
制限します。クライアント コードが別の型の引数を渡そうとすると、単純にコンパイルされません。これは単体テスト
にも当てはまります。型注釈を使用すると、すべての単体テストが の型の引数でのみ呼び出されることが簡単にわかります。argMyTypefMyType
型注釈が削除された場合、型推論は無制限に機能しますが、テストの準備ができておらず、MyType.
したがって、型注釈の削除は、他のリファクタリングと同様に、 Unit Tests の変更に関連付ける必要があります。テストを改善する準備ができている場合は、それを実行してください。そうしないと、特に大規模なコードベースの場合、トラブルが発生する可能性があります。
それは個人のスタイルの問題です。私はそれらを取り出します。F# のコーディングに慣れるにつれて、注釈フェーズを実行する必要が少なくなることに気付くかもしれません。