9

どこでも使用される前に関数を作成する場合、そのパラメーターに型注釈を追加すると便利です。これは、その値をオートコンプリートできることを意味し、(特に F# の初心者として) 予期しない型の推論によって混乱することはありません。

ただし、関数が終了すると、パラメーターの型注釈が醜いため、削除したくなります。これは合理的なことのように聞こえますか?

私が話している機能の種類に依存する可能性があると思います。たとえば、プライベート関数には意味がありますが、パブリック関数には意味がない場合があります。

4

5 に答える 5

6

いろいろな要因によると思います。注釈を残すことを支持するいくつかの議論を次に示します。

  1. 型注釈は、間違いなく、コンパイラによってチェックされるドキュメントの形式として機能します。
  2. 正当な理由なしに作業コードを変更しないでください。
  3. いくつかの型注釈がコンパイルに必要な場合があります。その場合、一貫性のために不要なものだけを削除するのではなく、それらすべてを残すことがおそらく理にかなっています。

ただし、一方で、それらを削除する説得力のある理由もいくつかあります。

  1. コンパイラは実際にはより一般的な型を推測する場合があり、その場合、より広範な一連のコンテキストで関数を再利用できます。
  2. コードはより簡潔になり、より読みやすくなります。
于 2012-09-02T22:30:10.117 に答える
4

価値のあることとして、私の個人的なスタイルは、fsi ファイルを使用してパブリック モジュール インターフェイスの注釈を維持し、fs モジュール実装ファイル内のほとんどの注釈を消去することです (左から右への型推論で必要な場合を除く)。このスキームでは、モジュール インターフェイスを変更することは大きな問題であり、その実装を変更することはそれほど重要ではありません。

于 2012-09-03T14:59:51.973 に答える
2

いいえ、利点はありません。プログラムを後で変更しやすくしたり、見た目が良くなったりすると言えますが、実際にはうまくいきません。

ほとんどの場合、最初に注釈を追加したのとまったく同じ理由で、とにかく注釈を再入力することになります。

于 2012-09-02T17:41:02.557 に答える
2

ここでの重要な議論は、型注釈を削除するとソースの意味が変わるということだと思います。

実際、ソースコードがあると仮定しましょう: let f (arg: MyType) = arg.ToString(). ソースはタイプ であることを
制限します。クライアント コードが別の型の引数を渡そうとすると、単純にコンパイルされません。これは単体テスト にも当てはまります。型注釈を使用すると、すべての単体テストが の型の引数でのみ呼び出されることが簡単にわかります。argMyType
fMyType

型注釈が削除された場合、型推論は無制限に機能しますが、テストの準備ができておらMyType.

したがって、型注釈の削除は、他のリファクタリングと同様に、 Unit Tests の変更に関連付ける必要があります。テストを改善する準備ができている場合は、それを実行してください。そうしないと、特に大規模なコードベースの場合、トラブルが発生する可能性があります。

于 2012-09-03T18:17:09.707 に答える
0

それは個人のスタイルの問題です。私はそれらを取り出します。F# のコーディングに慣れるにつれて、注釈フェーズを実行する必要が少なくなることに気付くかもしれません。

于 2012-09-02T20:00:02.490 に答える