booleanの変数名に悩む

Javaの命名規則の話

booleanを返すメソッド名の命名規則は知られていると思うが、
booleanの変数にもにメソッド名と同じ規則を当てている場合があるが
それはどうなのだろう。

かいつまんで言えばメソッドはつまり動作を表すので動詞が使われる。

なお、日本語で『私は○○だ』という、『は』は助詞で単語の関係性を表すわけだが、isは動詞だ。
『存在する』や『である』というのは動作の含まれるらしい。
なので、『である』系メソッドもまた動詞を使うことになるので、動作させる系メソッドと違いはない。

だが、である系メソッドは英語の文法で言えば他の動作系メソッドとは違う仕組みになっている。
また変数の命名規則についても同じようなルールを適用している場合もあるあ、それはどうなのか少し考えてみた。

booleanを返すメソッド名

メソッド名isをつけると覚えている人もいるだろうが、それは正しくはない。

三人称単数現在動詞
can+原形不定詞
has+過去分詞
has+名詞
is+形容詞
三人称単数現在動詞 + 名詞

三人称単数ってことで、主語は三人称なんだな。

きっとインスタンスが主語で、引数が補語や目的語になるのだろう。
たとえばstr.equals(str2) という引数と同じ文字列かどうかを判定するメソッドがStringにはあるが、
主語はstrということだろう。

Fileクラスにあるexistsメソッドは、三人称単数の自動詞だが、
こちらもFileクラスのインスタンスが主語だ。

canはいわずもがな、できるかどうかと言うニュアンスだ。
hasは完了を表している。「○○しちゃった」的なニュアンスだ。
has と名詞なら、○○を持っているということだ。hasNextなどで使われる。

hasかexistsか

existは、第1文型の自動詞だから目的語も補語も取らないので、その次に名詞がくるのはおかしい。

しかし例えば、クラスの中の属性として何かが存在するかどうかを表すメソッド名はどうしよう。

例えば、SNSの投稿文章全体を表すクラスがあって、その中に添付ファイルがあるかどうかを判定するメソッドがあったとする。

クラス名はArticle(記事)として、それにexitisというメソッド名をしたら『記事は存在するかどうか』という意味になる。
exitisFileというのもありえない書き方だ。

こういうときにはhasFileとするのが良い。

boolean型の変数名

メソッド名は動詞(助動詞)を頭にくっつけるように書くパターンだったが
変数ではどうだろう。
ローカル変数ではそれほど考えなくても良いかもしれないが、
フィールドだったらちゃんと考えなくてはならない。
とくにisとか頭につけると、それはメソッドなのか一見して分からない。

フィールドはそのクラスの属性と言えるので、名詞もしくは形容詞にするべきだろう。
C#とかではプロパティ名などに形容詞をつけているらしい。

とはいっても、githubで上がっているJavaで書かれたプロジェクトのbooleanのフィールドを見ても意外と統一性はなかった。

中には何を意味しているのか分からない略語や、isから始まるものもあった。

Java的というかオブジェクト指向的にはあまり変数は外から見えるものでもない。
表面に出てくるのはいつもメソッドなので、それほど気にはされていないのかもしれない。

スポンサードリンク

関連コンテンツ