メソッドの命名について
Twitterで話題になっていたので備忘録として。
発端は以下のしょぼちむさんのツイート。
@soudai1025 fromDate.isBefore(toDate) みたいに、クラス自体にもっているメソッドは付けやすいんですが、これが、 isBefore(fromDate, toDate) みたいに、引数の位置がかわったとたんによく分からなくなりますー!!><
— しょぼちむ@物理 (@syobochim) 2015, 3月 16
isBefore(fromDate, toDate)
これは混乱の元ですよね。
最初の例にある通り、fromDate.isBefore(Date date)っていう形が分かりやすいです。
僕はこんな返答をしましたが、今思えば、最初に例示されてる例そのまんまですね。
@syobochim クラス設計がよくない感。Dateを表すクラスにisBeforeメソッド作って引数一つにしたらいいかも。断片的な情報ですので間違ってたらすみません><
— まめぴか@DBスペシャリスト勉強 (@mame_pika) 2015, 3月 16
JVM界のイケメン、たろうさんの案。
僕もクラスの抽出が出来ない場合ならこれを採用します。
@syobochim @yy_yank @soudai1025 現実的な落としどころとしてはhogeIsFugeとか?fromDateIsBeforeToDateかな、今回の場合は。 悩んでいるのはメソッド名であるという前提。
— たろう (@ngsw_taro) 2015, 3月 16
boolean型の戻り値なので、is~で始める場合は、isDifferentOrderDate()とか…。
ちょっと英語に自信がないですが。。。
でこれ、SIer的詳細設計書(Excel方眼紙ですよ!)にはこんな感じで書いてあるんだろうと推測。
<終了日が開始日より前の日付の場合>
・エラーとする
詳細設計書があれば、誰でも同じコードになるというのがSIer的論理ですが、
上述のように、分かりにくくも分かりやすくも如何様にも書けます。
コーディングが如何にプログラムの質を左右するかというお話。