プログラミングで最も重要な、命名についての原則です。
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に考えてもらうのも手です。
「クラウドからデータを取得する」という処理をするメソッドの名前を考えて
「fetchDataFromCloud」など、次のような名前のメソッドが考えられます。
- fetchDataFromCloud
- retrieveDataFromCloud
- downloadDataFromCloud
- fetchCloudData
- getCloudData
- fetchFromCloud
- getDataFromCloud
これらは単なる提案ですので、具体的なコンテキストや言語のルールに基づいて適切なメソッド名を選択することが重要です。
便利な世の中になりましたね。
意味不明な引数や戻り値も気をつけよう
例えば
String swap(int value) { ..
なんでメソッドがあったとしたら?
なにを入れ替えるの?なんの文字列が返るの?…謎は深まります。
引数や戻り値も、そのメソッドの役割からして自然になるように定義しましょう。
まとめ
メソッド名の例を取り上げましたが、ほかにも機能名や画面のボタン名など、あらゆるものに驚き最小原則は適用されるべき。
名前は真剣に考えましょう。






コメント