web-dev-qa-db-ja.com

Java boolean getters "is" vs "are"

ブールゲッターのJavaの規則には接頭辞 "is"が含まれることがわかっています。

_isEnabled
isStoreOpen
_

しかし、件名が複数の場合はどうなりますか?つまり、ストアが開いているかどうかを知りたいのではなく、すべてのストアが開いているかどうかを知りたい場合はどうでしょうか。

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

次のようなゲッターを作成したいと思います。

_areStoresOpen
areDogsCute
areCatsFuzzy
_

そして、それは理にかなっていると思いますが、私はそれを吸い上げて主語の動詞の同意を放棄し、isStoresOpenisDogsCuteisCatsFuzzy

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

83
kodai

これがどの本であったかは思い出せませんが、本質はコードが書かれているよりもずっと多く読まれるということです。読みやすくするために書いてください。

56
John

十分な英語を使って、Java standard:

isEveryStoreOpen()またはisEachCatCute()

正しい言葉に疑問があるとき、私はいつもシソーラスを見つけたいです。

76
satur9nine

慣例では、ゲッターメソッドの前に、変数そのものではなく「is」を付けます。

例えば.

private boolean enabled;

public boolean isEnabled() {
    return enabled;
}

そして

private boolean storesOpen;

public boolean isStoresOpen() {
    return storesOpen;
}

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

文法的に意味をなさないかもしれませんが、慣習に従い、十分に読みやすいように見えます。

32
Bhesh Gurung

Java Bean仕様では、getでない限り、ゲッターにbooleanを使用し、isを使用します。areは非-standardであり、標準のBeanネーミングを期待するものには認識されません。

18
Steve Kuo

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

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

17
Kevin Rubin

-isEnabled()は、_Java naming conventions_のgetEnabled()としても記述できます。

-命名規則に従うのは良い習慣であり、_Java Beans_で作業しているときに役立ちます。

3

英語またはJavaでどの言語を書いていますか?

私がJavaコードを読んでいるとき、isおよびareプレフィックスは、1つのプレフィックスを検索するよりも複雑になります。

しかし、一方で、朝新聞を読むときは何も探していません。そのため、より伝統的な英語で書くことができます。

0を返します。

3
Ilya Gazman

一般に、メソッドはほとんど段落として読めるように、コードはできるだけ簡単に読めるようにすべきだと思います(Clean Code)。したがって、できるだけ簡単に発音/読み取りできるようにメソッドに名前を付け、areの文法規則に従ってください。最新のIDEでは、get/isを特に探すことなくメソッドを簡単に見つけることができます。

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

3
John B

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

次に、すべてのストアが開いているかどうかをチェックするメソッドに言及します。このメソッドはゲッターではありません。1つのインスタンスに関する情報を返すのではなく、すべてのインスタンスを返すからです。もちろん、クラスStoresがない限り。この場合、Javaには配列やコレクションなどのインスタンスを多数保存する方法があるため、余分なクラスを記述する必要はないため、設計を再考する必要があります。

そうでない場合は、このメソッド名で問題ありません。別の方法は、「is」なしのallStoresOpenだけです。

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

2
Kirill Rakhman

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

1
asteri

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

Java Naming Convention and Java Beans Standards、それらはブールおよび他のタイプの事前定義されたプレフィックスを持っているので、あなたはJava Beans Naming Convention。

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

ここに

storesOpenは英語の文法に従って複数形です。

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

ブール値であり、trueまたはfalseのみです。

英語の複数形ステートメントtrue'sまたはfalse'sとは異なります

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

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

もう1つ重要なことは、そのようなブールプロパティがクラスで使用され、フレームワークの事前定義ライブラリで使用される場合は常に、ブール値を取得するために接頭辞「is」を使用するフレームワーク、

なぜあなたは複数形/単数形、マルチプレクサなどのような英語の文法を知っているので、あなたよりもそれほど賢くないということを意味します...

1
Anil Kumar

正直言って、are*is*"is"を変数の意味として使用し、可能であればより良い名前を付けます。

IsStoresOpenはそれほど悪くないように聞こえますが、isStoresAreOpenの方が良い場合は作成できます。

しかし、私の一般的な考えは、慣習に従うことです。これは、ゲッターに「get」を使用し、ブール型に「is」を使用しています。個人的には、 "is"の使用は既に問題を抱えていると思います。はい-「if」条件でよく見えますが、コーディング時に「get」と書いて必要な変数のドロップダウンリストをチェックし、何が間違っているのか、なぜ見つけられないのか疑問に思うことがあります「で」で始まる...

0
Arturas M