驚き最小原則~その名前おかしくない?

principle-of-least-astonishment

プログラミングで最も重要な、命名についての原則です。

驚き最小原則

Principle of least astonishment

インターフェースの名前は最も自然に思える(驚きが少ない)ものを選択すべき

当たり前のようですが、注意しないと、けっこう落とし穴にはまります。

目次

どんなときに使うの?

ありえない名前がついてるとき

リーダーさん

ねえ、このgetData()メソッド、実行したらデータが消えちゃったんだけど…

イケイケくん

そっすねー。それ実行するとデータ全部消える仕様っすよー

リーダーさん

……は?

その名前からして、いちばん自然に見える動きをすべき、ということですね。

getXXX / setXXX がやばい

安直な get/set メソッド

“getter/setter” と言われるこれらのメソッドは、値を取得するだけ/設定するだけ、しかやらないのが世界共通認識です。

  • getData()が、クラウドにアクセスし取れるまで3回リトライしていたり
  • setData()、データベースへの書き込みを行いさらにバックアップを複製していたり

なんて、誰も思わないわけです。

内容からして、get/set なんて名前つかないはずなのに、なんでつけてしまうのか。

理由は2つ。

いい名前が思いつかない理由
  • ぴったりくる名前がない
  • 英語で表現できない

ぴったりくる名前がない=複数のことをしてるのでは?

「クラウドにアクセスし取れるまで3回リトライする」に、ぴったりとくるメソッド名は難しいでしょう。一言で表せないですからね。

なので苦し紛れに、getXXX なんていう、どうとでも取れそうな、もやっとした名前をつけてしまうのです。

メソッドは、ただ一つのことをするべき。いい名前が浮かばないなら、そのメソッドが複数の役割を担ってないかを考えましょう。

例えば、”accessToCloud”、”retry“と分ければ、自然なメソッド名に見えますね。

英語で表現できない=プログラミング的英語表現を覚えよう

これは普段英語を使わない、日本人特有の問題でしょう。

プログラムはすべてが「入力」と「出力」。だから日本人的には get / set でも違和感を持たない。

get / set のような対になる言葉は、他の英語表現の仕方を知らない人もいます。プログラミング的表現を覚えておきましょう。

入力/出力のような対象語
スクロールできます
英名意味主な用途
get
set
取得する
設定する
単純な値の出し入れ
add
remove
追加する
削除する
リストへの追加や削除
push
pop
追加する
取り出す
スタックへの追加や削除
insert
delete
挿入する
削除する
データベースへの追加や削除

ChatGPTに聞いてみるのもいい

英語ではなんて言ったらいいのか分からない…そんなときは、ChatGPTに考えてもらうのも手です。

ChatGPT

「クラウドからデータを取得する」という処理をするメソッドの名前を考えて

「fetchDataFromCloud」など、次のような名前のメソッドが考えられます。

  1. fetchDataFromCloud
  2. retrieveDataFromCloud
  3. downloadDataFromCloud
  4. fetchCloudData
  5. getCloudData
  6. fetchFromCloud
  7. getDataFromCloud

これらは単なる提案ですので、具体的なコンテキストや言語のルールに基づいて適切なメソッド名を選択することが重要です。

便利な世の中になりましたね。

意味不明な引数や戻り値も気をつけよう

例えば

String swap(int value) { ..

なんでメソッドがあったとしたら?

なにを入れ替えるの?なんの文字列が返るの?…謎は深まります。

引数や戻り値も、そのメソッドの役割からして自然になるように定義しましょう。

まとめ

メソッド名の例を取り上げましたが、ほかにも機能名や画面のボタン名など、あらゆるものに驚き最小原則は適用されるべき。

名前は真剣に考えましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次