web-dev-qa-db-ja.com

オブジェクトの命名における「my」接頭辞の使用

私は大きなコードベースをリファクタリングしており、作成者がオブジェクト名のプレフィックスに「my」を使用することが多いことに注意してください。たとえば、myThingyを使用して、タイプThingyのオブジェクトを識別します。これは一般に、良いまたは悪い命名パターンと考えられていますか?

ソフトウェアエンジニアリングラジオの命名について episode を聞いた後、命名パターンに疑いがあり、この問題に関して一般的なコンセンサスがあるかどうか知りたいです。

6
Jon Deaton

著者のように、コード例をカットアンドペーストしています。これは、一般的にMyで始まるクラスを示し、(フレームワーククラスや自動生成されたクラスではなく)個人によって記述されていることを示しています。プレフィックスを外したり、主題ドメインに関連するクラスに名前を付けたりする必要があります。接頭辞を付けることは、私が聞いたことのある既知の慣例ではなく、実際には非常に歩行者です。

また、クラス名はJavaとC#の両方で大文字にする必要があるため、少なくともMyThingyではなくmyThingyにする必要があります。

14
John Wu

プログラミング言語を使用しているわけではないので、-lotの違いになります!

「C」スタイルの言語では、クラス名は通常大文字の文字で始まります。そのTypeの変数は、次のように小文字の最初の文字で宣言できます。

class Zebedee { ... } 

Zebedee zebedee = ... ; 

大文字と小文字を区別しないことが多いBASICスタイルの言語では、2つの名前が衝突するため(実際には "Zebedee" = "zebedee" !!)、これを行うことはできません。二。
薄暗い遠い過去に戻って、オブジェクトタイプが比較的少なく、はるかに遠いとき、ハンガリー記法は、短縮されたタイプ固有のprefixをすべての変数名に付けました。これを使用すると、使用している変数の種類を理解するために、プレフィックスmeantを知る必要がありました。しかし、オブジェクトが「主流」になると、これは完全に手に負えなくなり、増え続ける接頭辞の数と長さは、多くの場合、「意味のある」変数名がそれらの端に付けられたものよりも長くなります。

今日では、これらの言語では何かを前面(または背面)に配置することは依然として必要であり、多くの本やコースが "my"を飛び散らせるように書かれています。

4
Phill W.

たとえば、myThingyを使用してタイプThingyのオブジェクトを識別します。これは一般に、良いまたは悪い命名パターンと考えられていますか?

このThingyのインスタンスは別のオブジェクトのメンバーですか?彼らはメンバーの関係を示しようとしているのでしょうか?

たとえば、メンバーの前にアンダースコアを付けるという慣習があります。したがって、_thingyです。 C++では、アンダースコアのプレフィックスは予約名を示すことが多いため、m_thingythingy_を使用するか、thisポインター(this->thingy)を使用するのが一般的です。これは、クラスの他のメンバーにアクセスするためにクラスメソッドでスコープを指定する必要がないため、Thingyのインスタンスを渡す可能性のあるメンバーメソッドでスコープを設定するのに役立ちます。

したがって、myThingyは型破りですが、これが当てはまる場合は理解できます。

3
HorusKol

これは大流行です。これは、Win98がMyDocumentsを使用したときに始まり、MyDocumentsに名前が変更されたときに終了しました。

変数の最初の文字を小文字にし、クラス名を大文字にするという私たちの慣習では、通常、クラスのインスタンスがあるということだけを言いたい場合は、プレフィックスイボを付けずにクラスの名前を盗むことができます。

Thingy thingy = new Thingy();

したがって、myThingyの唯一の正当な理由は、その名前が何かを伝えているかどうかです。

Thingy myThingy = new Thingy();
Thingy yourThingy = new Thingy();

それができない場合、これは余分な迷惑なノイズです。クラス名とは異なる名前を付ける場合は、ここで何が行われているのかがわかるように名前を付けると、はるかに価値があります。それでも、Thingyという名前の実際のクラスはないことを教えてください。

2
candied_orange

これは一般に、良いまたは悪い命名パターンと考えられていますか?

私の経験では、命名パターンはコードベース全体で一貫して従われ、毎回同じことを意味する場合に適しています。したがって、接頭辞myが常にローカル変数を表すか、常にメンバー変数を表す場合は、適切な命名パターンだと思います。その場合、パターンを使用すると、コードの詳細を調べなくても、変数のスコープまたは目的に関する情報をすぐに推測できます。

それが悪いパターンになるのは、パターンが一貫して守られていないときです。 my接頭辞を使用しても、変数が一貫して追跡されないためにプログラマーが変数について何かを推測できない場合は、せいぜい役に立たず、害が大きくなります(例:myが- ほとんどはメンバー変数に使用されますが、誰かがローカル変数に使用すると、プログラマーが誤った仮定をしてバグにつながる可能性があります)

したがって、私の意見では、myCustomerまたは_customerまたはcustomer_などを使用するかどうかについてはそれほど重要ではありません。パターンはまったく使用しないでください。

0
Eric Petroelje

通常、これは非常に悪い考えです。すでに述べたように、すべての主要なプログラミング言語は大文字と小文字を区別するので、

void processThingy(Thingy thingy) {
   Foo foo = new Foo(thingy);
   Bar bar = new Bar(thingy, foo);
   ...
}

接頭辞なし。 「my」接頭辞は、「theirs」(gitでマージするときなど)もある場合に意味があります。そうでなければそれは間違っています。

- だが Thingy thingyも良くありません。

良い名前がない場合にのみ有効です。比較する

void copy(File file, Path path);

そして

void copy(File source, Path destination);
0
maaartinus