web-dev-qa-db-ja.com

動詞であるブールフィールドの命名

Javaでは、慣例により、ブール型フィールドのゲッターとセッターはisField()setField()になります。これは、activevisibleclosedなどの形容詞であるフィールド名で完全に機能します。

しかし、haveChildrenのように動詞の意味を持つフィールドに名前を付けるにはどうすればよいですか?動詞に「_ing」を追加します(havingChildren)、 多分?

明確にするために、メソッド名(getterとsetter)はIDEによって自動生成されるため、制御できません。 IDEがそのためのゲッターを生成するとき、それは理にかなっています。たとえば、hasChildrenは完璧なフィールド名ですが、 IDE isHasChildrenになるフィールドのゲッターを生成します。これを解決するにはどうすればよいですか?

14
dnang

短い答え:

  • メソッド名は、内部実装を反映するために想定されているわけではありませんが、予想される動作です。

長い答え:

haveChildren()hasChildren()という名前にする必要があります。

また、hasChildren()がブール型クラスメンバーのゲッターであるとは限りません。このようなメソッドは、タイプCollectionのメンバーが空かどうかを調べると思います。

デフォルト名an IDE生成されたゲッターとセッターに与えられるものは、根拠のある法則ではありません。

別のポイント:インターフェースには、まだ実装されていないメソッドの名前があります。

メソッド名が内部実装を反映するために推測された場合、誰かがどのようにしてインターフェースを設計できるでしょうか?インターフェースには実装がなく、実装者が内部で何をするかを事前に知っていません。

たとえば、JavaのIteratorインターフェースを見てみましょう。

Iteratorを実装すると、nextという名前のブール型メンバーがあったとしても、hasNext()isNext()またはisHavingNext()。これは実装の詳細です。実際、私はIteratorを実装しており、クラスにnextという名前のリストがある(ブール値ではない)タイプのメンバーを持っています。次にhasNext()は_next!=null_を返します。

また、これを見てください:

_class patient {
      private boolean Pulse;
      private boolean breaths:
      public boolean isDead(){ return (!Pulse & !breaths);}
}
_

isDead()は通常のゲッターではないことに注意してください。

IDEの生産性ツールを自分たちのものにする。

11

フィールド名をparentに変更して、ゲッターがisParentになり、セッターがsetParentになるようにすることをお勧めします。

変数名にchildPresentを、ゲッターとセッターにisChildPresentsetChildPresentを試すこともできます。

動詞の前にdoesを置くことができます。あなたが提供したあなたの例ではdoesHaveChildrenのように。あるいは、コンテキストに応じてshouldHaveChildrenを使用することもできます。

0
miguel.martin

質問は完全に合理的です。自動生成されたメソッドの名前を変更するだけでは不十分な場合があります。例:JSF管理対象Beanは、_boolean xyz_プロパティのゲッターメソッドとしてisXyz()を持っていることが期待されます。

フィールド名をparentに変更し、メソッド名としてisParentを使用することを提案するBlackPantherに同意します。情報非表示の原則によれば、ゲッターメソッドとセッターメソッドの可読性は属性の可読性よりも重要です。

0
Paulo Merson