114

ブールゲッターのJavaの規則には、接頭辞「is」が含まれていることを私は知っています。

isEnabled
isStoreOpen

しかし、主題が複数形の場合はどうなりますか?つまり、店舗が開いているかどうかを知りたくなく、すべての店舗が開いているかどうかを知りたい場合はどうなりますか?

isStoresOpen()英語では意味がありません。

私は次のようなゲッターを書きたくなります:

areStoresOpen
areDogsCute
areCatsFuzzy

それは理にかなっていると思いますが、他の人から、それを吸い上げて主語の動詞の一致を放棄し、、、を使用する必要があると言われisStoresOpenましisDogsCuteisCatsFuzzy

とにかく、複数の主題を操作するブールゲッターに対してはどうすればよいですか?

4

12 に答える 12

122

十分な英語を持ち、Java標準に従うのはどうですか。

isEveryStoreOpen()またisEachCatCute()

正しい言葉がわからないときは、いつもシソーラスを叩くのが好きです。

于 2014-03-14T06:47:18.583 に答える
64

これがどの本から来たのか思い出せませんが、本質的には、コードは書かれているよりも何度も読まれるということです。読みやすくするために書きます。

于 2012-10-18T17:47:48.940 に答える
37

慣例では、getterメソッドの前にvariale自体ではなく「is」を付けます。

例えば

private boolean enabled;

public boolean isEnabled() {
    return enabled;
}

private boolean storesOpen;

public boolean isStoresOpen() {
    return storesOpen;
}

isStoresOpen()は英語では意味がありません。

文法的には意味がないかもしれませんが、規則に従っており、十分に読みやすいように見えます。

于 2012-10-18T17:46:40.107 に答える
19

Java Bean仕様では、 then usegetでない限り、getterに使用するように指示されています。は非標準であり、標準のBean命名を期待するものでは認識されません。booleanisare

于 2012-10-18T18:07:13.527 に答える
17

多くのツールは、認識している、isまたはget認識していない可能性がありareます。

互換性と規則を改善するために、getDogsAreFuzzy()またはそのようなもののように言い換えてみてください。getStoresAreOpen()

于 2012-10-18T17:47:32.070 に答える
6

英語Javaのどちらをコーディングしますか?

私がJavaコードを読むとき、私は物事が構造的であることを期待しています。で始まるブールメソッドisは適切な構造です。

return 0; 
于 2012-10-25T08:09:47.370 に答える
4

- のようにisEnabled()書くこともできます。getEnabled()Java naming conventions

-命名規則に従うのは良い習慣です。で作業するときに役立ちますJava Beans

于 2012-10-18T17:46:51.947 に答える
3

一般に、コードはできるだけ読みやすくして、メソッドをほぼ段落として読み取ることができるようにする必要があると思います(によって支持されているようにClean Code)。したがって、私はできるだけ簡単に発音/読み取りを行う方法に名前を付け、の文法規則を使用しareます。get最新のIDEを使用すると、 /を特に探すことなくメソッドを簡単に見つけることができますis

しかし、クマールは豆について良い点を述べています。get多くのツールは/のみを検索しますis。その場合、私は両方の方法を検討するかもしれません。1つは読みやすさのため、もう1つはツールの使用のためです。

于 2012-10-18T17:47:27.157 に答える
3

あなたの質問では、ゲッターについて明示的に質問しています。ゲッターは、クラスの1つのインスタンスに関する情報を返します。たとえば、クラスがありStoreます。さて、これisStoreOpenはゲッターの完全に優れたメソッド名です。

次に、すべての店舗が開いているかどうかを確認する方法について説明します。このメソッドは、1つのインスタンスに関する情報を返すのではなく、すべてのインスタンスに関する情報を返すため、ゲッターではありません。もちろん、クラスがない限りStores。この場合、Javaには配列やコレクションなどの多数のインスタンスを格納する方法がすでにあるため、設計を再考する必要があります。そのため、余分なクラスを作成する必要はありません。

そうでない場合は、このメソッド名で問題ありません。代わりallStoresOpenに、「is」がない場合もあります。

TL; DR:複数のインスタンスを扱っている場合、それはゲッターではありません。もしそうなら、あなたのデザインは悪いです。

于 2012-10-18T19:12:29.290 に答える
2

正直なところ、私は間違いなく忘れて、とどまると思いare*ますis*。を変数の意味と考え、"is"可能であればより適切な名前を付けてください。

isStoresOpenはそれほど悪くはないように聞こえますが、それがあなたにとってより良いと思えば、isStoresAreOpenを作成することができます。

しかし、私の一般的な考えは、慣習に固執することです。これは、ゲッターに「get」を使用し、ブール型に「is」を使用しています。個人的には、「is」の使用はすでに問題がある場合があると思います。はい-「if」条件では見栄えがしますが、コーディング時に「get」と記述して、必要な変数のドロップダウンリストを確認し、何が問題で、なぜ見つからないのか疑問に思うことがあります。 「is」で始まります...

于 2016-04-11T13:38:49.710 に答える
1

オブジェクト指向プログラミングでは、これが発生することはめったにありません。それは、独自のまたはメソッドを持つ別個のクラスである必要があるためStoreです。より高いタイプを使用している場合は、実際に使用しているよりアトミックなレベルに分割することを検討してください。一般に、オブジェクトは最下位レベルで複数形であってはなりません。CatisOpen()isFuzzy()

于 2012-10-18T17:48:53.150 に答える
1

このStoresOpenのisStoresOpen()は複数形のようですが、

そのJava命名規則およびJavaBeans標準に従う場合、ブール値およびその他のタイプのプレフィックスが事前定義されているため、JavaBeans命名規則に従う必要があります。

あなたのポイントに来てみましょう英語の見通しのようにstoresOpenを見ると、はい、それは複数形のように見えます。もう一度その言葉を深く観察し、

ここ

StoresOpenは、英文法によると複数形です。

isStoresOpenの結果は複数形ではなく、単数形であるか、プログラミング規則の観点からスカラーであると言えます。

出てきたのはブール値で、真か偽か

英語の複数形のtrueまたはfalseは好きではありません

trueまたはfalseの配列ではない、またはtrueまたはfalseのコレクションではない

したがって、ここでは、実世界のエンティティを指すクラスのプロパティに付けられた名前ではなく、そのブールBeanメソッドから返される値に関係していると言えます。

もう1つの重要なことは、そのようなブールプロパティがクラスで使用され、それらが任意のフレームワークの事前定義されたライブラリによって使用される場合は常に、使用プレフィックス'を持つフレームワークがブール値を取得するための'であるということです。

なぜ、複数形/単数形、マルチプレクサーなどの英語の文法を知っているほど賢くないということです...

于 2017-06-09T10:36:43.097 に答える