Java booleanゲッター「is」と「are」


90

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

isEnabled
isStoreOpen

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

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

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

areStoresOpen
areDogsCute
areCatsFuzzy

そして、私はそれが意味をなすだろうと思うが、私はちょうどそれを吸うと契約し、利用動詞主題を放棄すべきであることを他の人が言われてきましたisStoresOpenisDogsCuteisCatsFuzzy

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


3
are*()ゲッターの前で見たことがない。
12

21
are*()文法的に正しい場合は、常にゲッターを作成します。
冷凍エンドウ豆のロディ

2
あなたのオブジェクトがBeanであるならば、私はあなたがどちらかに固執する必要があると思いますishas...
assylias

4
are *()ゲッターを使用している場合、ほとんどの場合boolean []を返すはずです。
Juvanis

2
非常に良い質問です。私自身、かなり気になります。多くの回答がすでに指摘しているように、ほとんどのフレームワーク、IDE、および私が遭遇した規則に依存するものはすべて、「get」/「set」/「is」パターンを使用します。これがアプリケーションで問題にならない場合でも、私はその規則に従います-一貫した命名規則を維持すれば(たとえ文法的に奇妙に聞こえなくても)コードは(あなたでも)はるかに簡単になります)。
ポールリヒター

回答:


57

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


20
クリーンコード-ロバートマーティン
ジョンB

8
ただし、行き過ぎないように十分注意してください。 storesAreOpen()文法的には(のせいでif(storesAreOpen()))可能性が高いですが、名前のブール部分はメソッド名の中央に隠されているため、Javaの規則読み取り可能なコードに違反しています。
12

108
これがどのように受け入れられたのか理解できません。それは質問に対する決定的な答えさえ提供しません。
Tamzin Blake

3
彼は非常に一般的な方法で質問に答えます。彼が具体的なことを述べていないのは事実ですが、これは答えです。ありきたりに思えるかもしれませんが、それには価値があります(少なくとも24人がそう思う)。
ジョージストッカー2013年

4
答えを明確にするために、ここではareStoresOpen()が良い選択であるというコメントを追加します。
kiedysktos

94

まともな英語と次のJava標準を持つことはどうでしょうか。

isEveryStoreOpen() または isEachCatCute()

正しい単語が疑わしいときは、常にシソーラスを調べたいと思います。


18
+1。これは、あいまいなisStoresOpen()とは異なり、戻り値がisEveryStoreOpen()またはisAnyStoreOpen()を意味するかどうかを明確に伝えます。
Imre

4
+1これは受け入れられる答えです。Java booleanis接頭辞規則を維持しながら、文法的に意味があります。さらに、コードベースのメンテナーである英語を母国語としない人々にとって本当に役立つ、追加の情報が少し提供されます。
2018年

この答えは私の人生を変えました!そして、それは受け入れられた答えであるべきです。
Marcel Blanck

34

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

例えば

private boolean enabled;

public boolean isEnabled() {
    return enabled;
}

そして

private boolean storesOpen;

public boolean isStoresOpen() {
    return storesOpen;
}

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

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


あなたの答えは理にかなっており、私は感謝しています。権威ある正しい/間違った立場から、あなたは正しいと思います。私は、ルールを守るためにその目的を放棄するために、明白で、明確で、理解しやすいことによって私たちを助けることを目的とした規則を望んでいません。しかし、あなたは正しい-これがその通りであり、それが私が尋ねたものです。
kodai

@kodai:それは規則としてではなく、単なる慣例として考えられるべきだと思います。ただし、必要に応じて、規約に従わないコードを書くことは、コードを読みやすくすることで実現できると信じています。
Bhesh Gurung、2012

18

Java Bean仕様ではgetbooleanthen useでない限り、getter を使用するように規定されていますisareは非標準であり、標準のBean命名を期待するものには認識されません。


17

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

以下のように、それらを言い換えてみgetDogsAreFuzzy()たりgetStoresAreOpen()または互換性と規則のためにそのようなもの。


はい。Beanユーティリティのようなツール、ブールゲッターを見つけることです。
nalply

4

- isEnabled()のように書くこともできるgetEnabled()の中でJava naming conventions

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


3

一般に、メソッドは段落としてほとんど読み取れるように、コードはできるだけ読みやすいはずだと思います(によって支持されていますClean Code)。したがって、私は可能な限り簡単に音を出して読む方法を挙げ、の文法規則に従いareます。最新のIDEでは、特にget/ を探すことなく、メソッドを簡単に見つけることができますis

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


3

英語またはJavaで何語を書いていますか?

私はJavaコードを読んでいたとき、私は、両方のゲッターを検索するために私を有するものがあることを期待しているされている接頭辞、より多くのちょうど1プレフィックスを探してより複雑になります。

しかし、一方で朝に新聞を読んでいるときは何も探していませんので、もっと伝統的な英語で書くことができます。

0を返します。


3

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

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

そうでない場合は、このメソッド名で十分です。別の方法としてはallStoresOpen、「is」がない場合があります。

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


2

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

isStoresOpenはそれほど悪くないように聞こえますが、それがあなたのために聞こえる場合はisStoresAreOpenを作成できます。

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


1

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


1

このStoresOpenのisStoresOpen()は複数のように見えますが、

そのJava命名規則およびJava Beans標準に従うと、ブールおよびその他のタイプの事前定義された接頭辞があるため、Java Beans命名規則に従う必要があります。

さあ、あなたの言いたいことを考えてみましょう。イギリスの見込み客のように、storesOpenを見ると、複数のように見えます。もう一度その言葉を深く観察し、

ここに

storesOpenは、英語の文法によれば複数形です。

出てくるのisStoresOpenそれが特異であるか、あなたはそれが規則をプログラミングするという点でスカラーであると言うことができるのではなく、複数ではありません。

真か偽か、ブール値です

ないあなたの英語の複数の文のような真のまたは偽の

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

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

もう一つ重要なことは、このようなブール値のプロパティは、クラスで使用されており、それらはいずれの枠組みの中で事前に定義されたライブラリで使用されるたびに、その後、使用する接頭辞を持つフレームワーク「は、あるある、ブール値を取得するために」

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

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