エンジニアとして働いていると常に「名前」に触れています。クラス名、メソッド名、変数名、テーブル名。。。
名前を扱っている時、次のように考えたことはありませんか?
– 名前がイマイチだな。。。
– 合ってないんじゃないか??
名前は重要、なんで?
なぜ名前が重要なのか??それは、理解しやすく、変更に強く、そして読みやすいコードを書くためです。
悪い名前は大きな問題を引き起こす
理解が難しい
名前と内容が乖離していると脳に処理コストがかかります。
「これなんだろう。。。」という回数が多ければ多いほど脳にコストがかかります。
勘違いが起こる
名前から挙動を想像してそのメソッドを使ったけど、実は全然違っていた!!なんてこともありえます。
- 名前から挙動を想像してそのメソッドを使うも、実は全く違っていた
def create_user(name:)
where(name: name).delete_all
end
変更が難しい
例えば、Ruby on Railsのプロジェクトでテーブル名を変更しようと思ったら以下の修正が必要です。
- テーブル名の変更
- モデルクラス名の変更
- そのモデルクラスを使っている箇所全ての修正
- そのモデルクラスの関連処理全ての挙動確認
これは想像するだけで大変でしょう。。。
良い名前をつけるにはどうすればいいの?
英語のネイティブスピーカーにも難問
There are only two hard things in computer science: cache invalidation and naming things
コンピュータサイエンスで難しいのは2つしかない。キャッシュの無効化と名前付けである
(Netscapeの開発者Phil Karltonの言葉)
- ネイティブだから簡単、ノンネイティブだから難しいということはない
- 何語であれ、的確に名前に落とし込めないということは頭の中で論理や構造がそもそも整理できていない可能性があるということ
- とはいえ、名前付けには高度な英語力を必要とするのも事実
4つのステップ
- 品詞
- 時制・相
- 語彙 ← 今回はここに注目
- スペリング
語彙
的確な言葉を求めて
- 止めるという意味の単語
- stop, quit, exit, abort, cancel, shutDown, terminate, kill, break….
- どれが一番適している?
対義語
?♂️previous ←→ next
?♂️before ←→ next
?♂️valid ←→ invalid
?♂️valid ←→ wrong
まとめ
ここまで色々書いていてあれなのですが、僕は名前について以下のような考えを持っています。
- わかりやすいわかりにくいは人それぞれ
- 「万人にわかりやすい」名前なんてごくわずか
- 万人にわかりやすいを求めるより、プロジェクトでルールを決めればいいと思っている
知り合いのエンジニアの話
- 変数名やメソッド名が暗号化されている
- イメージとしては
knk
= kokusai nennkinn kikou = 国際年金機構
- イメージとしては
- 辞書にまとめてあるので調べると理解できる
以前実際に携わったアプリゲーム案件
- APIのURLが意味をなさない英数字
- イメージ
- https://aseajcie.com/eacerase/sdajcmeajnsjdnfajsdjfasd
- イメージ