
変数やメソッドの名前を決めるのは、
簡単なことのようで難しかったりします。
それでいて重要であったりもします。
そこで、1つ気になる点があるので質問させていただきます。
例えばある Util クラスがあるとします。(例として StringUtils クラス)
この StringUtils は static なメソッドの集まりをもつように実装します。
文字列が空かどうか調べるために、よく使用されているのが public static boolean isEmpty(String value) というメソッドがありますが、これに疑問があります。
このメソッドを使用する場合は、StringUtils.isEmpty("abc") などとなると思いますが、これって英語の意味的におかしい気がします。(私は英語がまったくできないので偉そうなことは言えませんが、、)
これだと、「StringUtlsは空だ」みたいな意味になってしまいませんか?
私はこういうときには「checkIfValueIsEmpty(String value)」のようにしています。StringUtils.checkIfValueIsEmpty("abc")
これだと「StringUtils が value を空かどうかチェックする」という意味になりませんか?
皆さんはこういう場合、どのように命名されていますか?
確かに boolean を返す場合には定例や規約として「is~」が使われていますが、どうも気持ちが悪いので質問させていただきました。
以上、よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
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」となり、名前を見ただけでメソッドの働きがすぐにわかる。
また、これは命名規則さえ知っていれば、「こういう働きをするメソッドは何という名前か」を類推して知ることもできる。命名ルールが重要なのは、それが自然な表現かどうかではなく、実にこの「誰でも機能から名前を、名前から機能を相互に類推できる」という部分にある。自然言語に似せるために、このもっとも重要な部分が機能しなくなったのでは本末転倒だ。プログラミング言語における命名は、常に「いかにして名前だけで誰もがその内容をわかるものにするか」を第一義に考えなければならないはずだ。
まあ、少なくともこうした基本的な命名のマナーを定めてきた連中は、われわれ日本人よりはるかに英語に通じている米国人なわけで、そうした米国人に対して、日本人が「英語として変だ」といっても、なぁ。
ご回答ありがとうございます。
「StringUtils: "Is empty?"」
は私も考えました。
ただ、「static の場合には、メソッド名は疑問形とする」
といった慣例もないので躊躇していました。
isEmpty()とすることで、そのメソッドの仕様がわかりやすいというのも
わかります。
「自然言語に沿うよりルールに沿う」ということも考えました。
Jakarta commons ライブラリを作った人達にも聞いてみたいですねw
ありがとうございました!!
No.3
- 回答日時:
自分の場合ですが、isXXX()メソッドは疑問文ではなくて
「(引数の値は) is Empty. True or False?」
とこちらが問いかけているようなものなんだな、と
思うようにしてました。
No.1
- 回答日時:
StringUtils.isEmpty("abc")
の場合、
StrintUtilsクラスのisEmpty()メソッドを呼び出す。
と言う意味合いのであると思われますので、
クラス名をS(主語)、メドッソ名をV(動詞)と考える事には無理があると思います。
英文にするなら、
call StringUtils class isEmpty method.のような解釈の方が近いかと、
思いますよ。
ご回答ありがとうございます。
確かに、static メソッドなので、
オブジェクトに紐付かないので
そのように考えると良いかもしれませんね。
ただ、いきなり「is」で始まるのは
やっぱり抵抗があるんですよね、、、
そもそも「is」始まりのメソッドは、
オブジェクトに紐付くメソッド(インスタンスメソッド)用の
名前じゃないのかなと勝手に思っています。
せめて「checkEmpty」?
また話が戻りそうだ、、、
ありがとうございました!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- その他(プログラミング・Web制作) Pythonで複数のメソッドをまとめて管理する方法について 1 2023/03/30 00:01
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- 英語 英語の質問に回答した時、誤答と決めつけられブロックされた件について 回答についてブロックされることに 7 2023/07/10 12:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0歳児の指しゃぶりに関して
-
リファクタリング > シグニチャ
-
vbaエクセルマクロ RemoveDupli...
-
エクリプス アウトラインビュ...
-
【sendkeysメソッドが動かずに...
-
カーソルのある行の行番号取得
-
基本的な質問で恐縮なのですが...
-
プリンター設定
-
Eclipseの畳むためのショートカ...
-
クエリ文字列の"?"の後を非表示...
-
要認証のファイルサーバからCSV...
-
Javaの研修についていけない。...
-
実行ファイルに値を渡す方法
-
Access2000 ユーザー名の取得
-
C# iTunes で プレイリスト選択...
-
日本の教育って時間が無い中で...
-
シンボルを解決できません。 ...
-
c#でVBのcall的役割を果たすコ...
-
JAVA入門者
-
javaの }{ の付け方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
DataGridViewでセルクリックイ...
-
【sendkeysメソッドが動かずに...
-
コマンドプロンプト実行後に画...
-
VBA コピーが出来ません…!
-
ウィンドウを最前面にできません
-
JSPで<SELECT>の中にDBから持っ...
-
javascriptからjavaを呼び出したい
-
VBPをダブルクリックするとたま...
-
eclipse-Tomcatでのデバッグに...
-
Application.Wait の参照設定
-
エクセルVBAにおけるON TIMEメ...
-
配列のメソッド
-
エクセルのマクロでプリンタを...
-
final修飾子を使っているのに、...
-
drawStringで文字間隔の調整
-
Excel VBA でExcelを終了したい...
-
worksheets & rows メソッドは...
-
CALLされていないメソッドを見...
-
vbaエクセルマクロ RemoveDupli...
おすすめ情報