- ベストアンサー
メソッドの命名の仕方
- 変数やメソッドの名前を決めるのは、簡単なことのようで難しかったりします。
- StringUtilsクラスのisEmptyメソッドに疑問があります。
- checkIfValueIsEmptyメソッドを使うべきかどうか悩んでいます。皆さんはどのように命名されていますか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
Java全般ではないが、JavaBeansにおける命名規則として、 ・値を設定するものは「setプロパティ」 ・値を取得するものは「getプロパティ」 ・ただし、取得する値が真偽値である場合には「isプロパティ」 という形で記述「しなければならない」ことになっている。それ以外の記述は受け付けない。このJavaBeansの仕様が、非常にシンプルでわかりやすいということから、それ以外にも浸透していっているんじゃないかと思う。基本的にこの種の命名は、それが自然言語に似ているかどうかということより「一定のルールに従って書くこと」が重要だ。 StringUtils.isEmpty それに、これはどう考えても、 StringUtils is Empty と解釈するほうが変だろう。StringUtilsとisEmptyは別の役割なわけで、もともとのオブジェクト指向の源泉をたどっていくなら、これは「StringUtilsさんが、"isEmpty"といっているよ」というような意味合いであるはず。つまり、 StringUtils: "Is empty?" ってことだろう。ならば、別に違和感はない。逆にcheckIfValueIsEmptyというように「check~」という命名は、何らかのチェック処理を行わせるものであり、結果を真偽値として取得するには変だ。メソッドの命名は、それがどういう働きのものかを類推できるものでなければいけない。であるならば「真偽値の返値を持つ」ということをメソッド名から瞬時に読み取れる名前である必要がある。 checkIfValueIsEmptyの場合、それが「チェックをするだけ」か、「チェックし、結果を真偽値で返す」か、「チェックし、結果をStringで返す」か、わからない。が、JavaBeansの命名規則をベースに考えるなら、チェックし真偽値を返すなら「isEmpty」、チェックしString値を返すなら「getEmpty」、チェックだけをし返値がないなら「checkEmpty」となり、名前を見ただけでメソッドの働きがすぐにわかる。 また、これは命名規則さえ知っていれば、「こういう働きをするメソッドは何という名前か」を類推して知ることもできる。命名ルールが重要なのは、それが自然な表現かどうかではなく、実にこの「誰でも機能から名前を、名前から機能を相互に類推できる」という部分にある。自然言語に似せるために、このもっとも重要な部分が機能しなくなったのでは本末転倒だ。プログラミング言語における命名は、常に「いかにして名前だけで誰もがその内容をわかるものにするか」を第一義に考えなければならないはずだ。 まあ、少なくともこうした基本的な命名のマナーを定めてきた連中は、われわれ日本人よりはるかに英語に通じている米国人なわけで、そうした米国人に対して、日本人が「英語として変だ」といっても、なぁ。
その他の回答 (2)
- zionic
- ベストアンサー率39% (31/79)
自分の場合ですが、isXXX()メソッドは疑問文ではなくて 「(引数の値は) is Empty. True or False?」 とこちらが問いかけているようなものなんだな、と 思うようにしてました。
- Yanch
- ベストアンサー率50% (114/225)
StringUtils.isEmpty("abc") の場合、 StrintUtilsクラスのisEmpty()メソッドを呼び出す。 と言う意味合いのであると思われますので、 クラス名をS(主語)、メドッソ名をV(動詞)と考える事には無理があると思います。 英文にするなら、 call StringUtils class isEmpty method.のような解釈の方が近いかと、 思いますよ。
お礼
ご回答ありがとうございます。 確かに、static メソッドなので、 オブジェクトに紐付かないので そのように考えると良いかもしれませんね。 ただ、いきなり「is」で始まるのは やっぱり抵抗があるんですよね、、、 そもそも「is」始まりのメソッドは、 オブジェクトに紐付くメソッド(インスタンスメソッド)用の 名前じゃないのかなと勝手に思っています。 せめて「checkEmpty」? また話が戻りそうだ、、、 ありがとうございました!!
お礼
ご回答ありがとうございます。 「StringUtils: "Is empty?"」 は私も考えました。 ただ、「static の場合には、メソッド名は疑問形とする」 といった慣例もないので躊躇していました。 isEmpty()とすることで、そのメソッドの仕様がわかりやすいというのも わかります。 「自然言語に沿うよりルールに沿う」ということも考えました。 Jakarta commons ライブラリを作った人達にも聞いてみたいですねw ありがとうございました!!