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


13

Javaでは、慣例により、ブールフィールドのゲッターおよびセッターはisField()およびになりsetField()ます。これは、のような形容詞ですフィールド名と完全に正常に動作しactivevisibleclosed、など

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

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


3
これがブールフィールドの場合、parent機能します。
ヤンニス

2
意味を逆にすることで逃げることができれば、「子供のいない」人はトリックになります。
キリアンフォス

3
IDEによって引き起こされる文法上の問題を回避するために、フィールドの名前に関するフープを飛び越えなければならないようなばかげているようです。とにかく、いくつかの追加の提案がありますが、私は他の人からすでに与えられているものが優れていると思います:isAllowedChildren、isNotEmpty、isContainer、isLeaf
Wily博士の弟子

子供のいない道を行くようです。親の問題は、親オブジェクトへの参照を保持する親フィールドが既にあることです。必要なのは、ブールフィールドのすべての動詞を形容詞に変換する一般的なルールだと思います。
-dnang

1
IDEにこのようなことを指示させてはいけないことに@dnhangに同意します。コードを読みやすくするためには、変数名とメソッド名を選択することが重要です。コードが記述されているIDEは無関係です。
Digitalex 14

回答:


10

短い答え:

  • メソッド名は、内部実装ではなく、予想される動作を反映していると思われます。

長い答え:

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

また、私はhasChildren()必ずしもブール値クラスのメンバーのゲッターであるとは思わない。このようなメソッドは、typeのメンバーCollectionが空かどうかを調べると思います。

IDEが生成されたゲッターとセッターに与えるデフォルト名は、石の法則セットであるとは思われません。

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

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

IteratorJava のインターフェースを例にとります。

実装するとIterator、名前付きのブールメンバがある場合でも、またはnextに名前hasNext()を変更することはできません。それは実装の詳細です。実際、私が実装したのは、クラスがリストを持つもの(booleanではない)のタイプのメンバーを持つことです。次にを返します。isNext()isHavingNext()IteratornexthasNext()next!=null

また、これを参照してください:

class patient {
      private boolean pulse;
      private boolean breaths:
      public boolean isDead(){ return (!pulse & !breaths);}
}

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

IDEの生産性ツールを活用してください。


3

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

あなたも試すことができchildPresent、変数名のためとisChildPresentし、setChildPresentゲッターとセッターとして。


1
上記のYannisのコメントと同じ考えですが、問題は既にparent親オブジェクトへの参照を保持するフィールドがあることです。必要なのは、ブールフィールドのすべての動詞を形容詞に変換する一般的なルールだと思います。
-dnang

0

does動詞の前に置くことができます。doesHaveChildrenあなたの例のように。または、おそらくshouldHaveChildrenコンテキストに依存します。


1
問題は、ゲッターとセッターがIDE(Eclipseなど)によって自動生成されるため、メソッド名を制御できないことです。
dnang

1
メソッドの名前を変更するだけですか?キーバインドを追加してメソッドの名前を変更します(まだ取得していない場合)。
miguel.martin

@dnhangがコードの場合、IDEが自動生成するときに呼び出すものに関係なく、好きなメソッドを呼び出すことができます。
リチャード

1
@ miguel.martinこれをしたくない理由の1つは、Java Beanです。の仮定はisSomethingその仕様の一部であり、多くの仮定がその周りに作られていますが、良くも悪くも、これに反するとdoesSomething、それほど明白ではない方法で物事を壊し、バグにつながります。

0

質問は完全に合理的です。自動生成されたメソッドの名前を変更するだけでは不十分な場合があります。例:JSFマネージドBeanはisXyz()boolean xyzプロパティの取得メソッドとして持つことが期待されています。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.