12

これが主観的な回答のように聞こえることは承知していますが、質問に対する客観的な回答が最も役立つため、質問をできるだけ客観的にするように努めます。

最近、メソッドの最後に前置詞を付ける癖があることをコード レビュアーから指摘されました。Pointクラスへの拡張メソッドとして私が書いた最近のメソッドは次のとおりです。

var rectangle = new Rectangle(0, 0, 2, 2);
var point = new Point(3, 1);

var result = point.DistanceTo(rectangle);

私のコードレビュー担当者は、メソッドpoint.Distance(rectangle). 私は常にこれを主観的でスタイルの問題と考えてきました。ただし、.NET API の設計がこの方向に向かっていることに気付きました。たとえば、NUnit の Fluent Interface を使用すると、次のようになります。

Assert.That(result, Is.EqualTo(1.0));

私はLinqでもこれを見ました:

list.CopyTo(anotherList);
list.IndexOf(item);
list.RemoveAt(0);

.NET やサード パーティ API の設計者がメソッドの最後で前置詞を使用するための確立された、または一貫した方法はありますか? それとも、単にスタイルの問題であり、主観的なものですか? .NET フレームワーク自体の API 設計は、このポリシーに従って進化しましたか?それとも、常に適切な場所にありましたか?

4

4 に答える 4

7

前置詞の目的語が対応する引数である限り、前置詞は問題ありません(通常、最初のthis引数であり、拡張メソッドの引数ではありません)。

最初の引数よりも後の引数になる可能性がある例:

array.CopyCountedTo(count, destination);

これが.NETで進化したかどうかについての質問に答えるために、そうではありません。

関数名の前置詞は、Microsoftよりもはるかに広く使用されています(Javaのようstring.charAtstring.indexOf)。また、.NETはLINQよりもずっと長く使用しています(ArrayList.IndexOf.NET 1.0など)。

于 2010-11-23T14:31:26.023 に答える
4

同意しました、それは主観的ですが、メソッド呼び出しが何をするかを理解するために「定義に移動」する必要がないという前提に同意します。名前は小説に展開されるべきではありませんが、説明的であることは確かに害はありません.

于 2010-11-23T13:07:03.240 に答える
2

この問題に関する私の個人的な見解は、前置詞がメソッド名の意味を強化するというものです。ほとんどの場合、アクションまたは計算を暗示しているように見えるため、プロパティ名にそれらを使用することはありません。フレームワークから提供した例を使用するには:

RemoveAtRemoveあいまいながら、位置を使用して動作することを明確に意味します。パラメータを調べるまで、その真の意味はわかりません。

CopyToは複製と移動の両方を意味しますが、Copy単独では明らかに複製を意味するだけです。

IndexOf戻り値とメソッドのパラメーターの両方の意味を教えてくれますが、戻り値のIndexヒントだけを示しています。

要約すると、それは完全に正当であり、コードの読みやすさと直感性を向上させると思います。

于 2010-11-23T14:25:57.793 に答える
1

お気づきのように、これは主観的なものですが、私はこれを行うのが好きであり、Linq がそれを使用しているという事実は、Microsoft からの暗黙の承認のように思えます。

于 2010-11-23T13:02:13.070 に答える