CODECOMPLETEの変数名の力を読んで。
きっかけ
プログラムを書く過程で、誰もが悩んだことがあるだろう変数名について改めて学んでみようと思った。
有名な書籍としてリーダブルコードがあるが、CODECOMPLETEの '変数名の力'は、良い名前、悪い名前について丸々一章割かれている稀有な本です。
良い変数名とは
本書の章末を要約したものである。
- 変数名は出来る限り具体的なものにする。曖昧な名前は通常悪い名前である。
- ループ変数や、状態変数のような特殊な変数には注意すること。
- 読み手のことをイメージし命名すること
- 命名規則を採用すること
言葉で書けば単純であるが、ではどうやって、良い変数名の精度を高めていくのか。
その手法と注意点を書いていく。
変数名の的確な長さ
変数名の長さは重要である、
短すぎれば、意図が汲みとれず、長過ぎれば、可読性が落ち、コーディングの負担が増加する
本書では、明確な意図を伝えつつ、可読性を損なわない範囲として
変数名に概ね8~20文字程度の長さが良いと示されている。
もちろん、これは変数名を必ずこの長さにしないといけない。というわけではない、
文字数が少ない変数名があれば、それが必要な明確さを保っているか確認する指針として使うをこと推奨している。
極端に短い変数名として、i j k
などが上げられる。
ループ変数など寿命が短いものであれば、暗黙的な了解として使用しても良いが、
その他の場面や、ループがネストする場合、その値をさらに加工する場合はにおいては、具体的な名前を振っておくことが良いとされている。
変数名を無闇に省略しない
下記のような省略された名前は意味を持たない。
また、数字などを使用すると可読性が落ちる。
Current
Date
X1 x2 x3
Temp
CurrentDate → cd
linesPerPage -> lpp
Boolの変数名
Boolを変数名にする場合は 変数名 = true or falseで意図が伝わるか注意する必要がある。
本書の一例として下記の名前がBoolに適しているとされている。
done
error
found
success
available
逆にstatus , sourceFile
などは不適切である。
状態 = true or false とはどういうことか。そもそも良い状態と悪い状態とは何を表すのか明確でない。
では、適切ではない値を扱うにはどうするか。
本書では以下のパターンが紹介されている。
statusSuccess
sourceFileAvailable
上記の要領でBoolに適した値を末尾につける。
そうすることでBoolには適していない名前を、適したものに置き換えているのである。
否定的な変数名は避ける
否定的な名前は、否定されるとわかりにくい。
notFound
empty
よく使われている例としてnotFoundなどは if not !notFound
などになっている場合可読性が落ちる
正しい反意語を使用する
反意語は理解しやすく、一貫性を保つことが出来る。
begin/end
first/last
start/end
old/news
source/target
命名規則を作る (まとめ)
本書後半では、プロジェクトやチーム単位の大小に関わらず、命名規則を作ることを強く推奨しており、
その作成方法に多くのページが割かれていました。
人によっては命名規則をチームで持つことは難しく、困難である場合もあるかもしれません。
しかしそのような状況においても、命名規則を自身で持つことは有用であると感じました。
反意語やBoolに使用できる名前を収集し、語彙力を高めておくことが良い変数名をつける第一歩なのではと、思います。
もちろん今回まとめた以外にも有用な情報が多く記載されているので、気になった方は手にとってみてはいかがでしょうか。