変数名における「名前重要の原則」と「1文字変数」に関して
作成日時:2025-12-02
更新日時:2025-12-03
変数の命名に関して最近考えたこと。
要約
- 変数名に悩む状況は多くの場合、メソッドの責務過多やスコープ肥大化など設計の問題を示す。
- スコープが小さく高凝集なら、一文字変数も含めて命名の厳密さをある程度緩められる。
- 名付けの難しさを減らすには、メソッドを小さくシンプルにする。
名前重要の原則
一般的に、変数名は”それが何を保持するのか/それは何なのか”を一目で把握できるように命名すべきである。
そうすればコードの可読性は上がり、認知負荷は下がる。
ただ、“明確な”命名をすることは難しい。
命名の困難さと設計の妥当性
最近思うことがある。
変数の命名に悩む時点で、そのクラス/メソッドの設計に改善の余地があるのではないか。
つまり、そのコードは適切な命名をしなければならない状態にある。
メソッドに大量の情報(変数)が存在したり、変数のスコープが大きい状態がこれにあたる。
メソッドに大量の情報(変数)が存在
あるメソッド内で複数のフラグを扱う場合。
それぞれのフラグを識別するために、明確な名称を付ける必要性が出てくる。(※1)
仮にメソッド内で扱うフラグが1つだけならば、var flag = canXXX();といった曖昧な命名でも充分だと考える。
何故ならば、そのメソッド内においてフラグが何を表すかが自明であるため。
※1
「同じ変数名を使いまわせば?」となりそうだがNG。
可読性は下がるし、バグを埋め込みやすい。
変数のスコープが大きい
仮に300行あるメソッドがあって、メソッドの先頭に明確ではない変数の定義があるとする。
250行目あたりでその変数を扱っている場合、それが何なのかを確認するためにメソッドの先頭に移動しなければならなくなる可能性がある。
変数のスコープが小さい、例えば5行程度なら多少、変数名が曖昧でも許容できる。
何故ならば、少し視線を上に移動すれば、それが何であるかを把握できるから、
命名しやすい設計
小さくシンプルにしておけば、命名に悩むことは無くなるのではないか。
扱う情報は少なく、行数も少なく。
高凝集かつ低結合。適切にメソッドを分割する。
そうすれば変数名は、多少曖昧でも許容できる。
書き手は変数名に悩むことは無くなるし、読み手も長ったらしい変数名を読むことがなくなる。
1文字変数
1文字変数、つまりvar a = "string";のような変数名は、アンチパターンとされる。
それが何を表しているか把握しづらくなるため。
しかし、前述した命名しやすい設計であれば、十分許容できると考える。
3行程度しかないメソッドにおいて、明確な命名をする必要性はあるか?
// 適当に書いたコードなので内容には言及しないで
private void registerUser(UserForm f) {
var e = User.from(f);
log.info(e);
userRepository.insert(e);
}とは言え、その後に改修が入ってメソッドの行数が増えた場合、可読性が下がることになる。
コードレビュー時、差分ビューアーによっては、該当行しか表示されないこともある。
例えば、上記コードにおいてログをlog.info("ユーザー:" + e.toString());などに変えた場合、
差分ビューアーに表示されるのは上記の改修箇所だけなので、「eって何?」となる。
個人的には、変更が確実に発生しそうになければ1文字変数を使う。
もしくは下記のような慣習的なものは使う。
- i,j: カウンター変数
- e: イベント、エンティティ
- o: オブジェクト
- a,b: 比較系
- k,v: Key-Value
- x,y,z: 座標系
- w,h: 幅、高さ
- etc…
説明変数/要約変数
説明変数/要約変数はスコープが小さくても、明確な名前を付けたほうが良い。
// 条件が2個程度ならいいが、さらに増えると購入可能な条件が分からなくなる
var canPurchase = "admin".equals(user.role) && user.money > 0;
// 説明変数/要約変数を使用する
var isAdmin = "admin".equals(user.role);
var hasMoney = user.money > 0;
var canPurchase = isAdmin && hasMoney;まとめ
とは言ってもすべてはケースバイケースである。
1文字変数でもいい場合や、明確な命名でなければならない場合もある。
状況や現場に応じて最善を追求するべき。
いや、そもそも改修を続けていけばソースコードは汚くなりがちだから、常に明確な命名をしたほうがいいかもしれない。
少なくとも下記の概念を持ってコーディングするとよい。
- 名前重要の原則を順守する。
- 変数のスコープは可能な限り小さくする。
- 物事は小さくシンプルにする。
参考
参考キーワード:名前重要の原則
参考キーワード:KISS原則
参考キーワード:SOLID原則
参考キーワード:凝集度・結合度
参考キーワード:Unix哲学(スモール・イズ・ビューティフル)
おすすめ書籍:リーダブルコード - O’Reilly Japan
おすすめ書籍:プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則 - 秀和システム新社 あなたの学びをサポート!