プログラミングにおける変数名

久しぶりに CODE COMPLETE をパラパラめくっていて目にとまったとこをメモ・

問題指向の名前

変数名にどのような名前を付けるべきか?プログラミングにおいて非常に重要な要素の一つです。良い変数名はプログラムを読み易くし、コードの理解を助けます。理解しやすいコードは保守も容易となり、アプリケーションの堅牢性に繋がります。

覚えやすい良い名前は、一般に、解決策ではなく問題を表現している。良い名前は、方法(how)ではなく、もの(what)を表すことが多い。一般に、名前が問題でなく計算の一部を表すとしたら、それはものではなく方法を表す。そのような名前は避け、問題そのものを表現する問題指向の名前を付けよう。

具体的には、

社員データのレコードには、inputRecまたはemployeeDataという名前を付けることができる。しかしinputRecは、計算の概念である入力と記録とを意味するコンピュータ用語である。employeeDataの方は、計算ではなく問題に言及しているので良い。

ふむ。

名前の適切な長さ

変数名の適切な長さについて記されています。

Gorla、Benander、Benanderは、変数の名前が平均して10〜16文字である場合、プログラムのデバッグに最も手間がかからないことを発見した(Gorla, Benander and Benander 1990)。変数の名前が平均して8〜20文字のプログラムも、ほぼ同じくらいデバッグが容易である。

これは、全ての変数名を10文字程度に保つのが良いということではないですね。平均というところがキモで、問題領域の重要な概念が十分に問題指向の名前になっており、長い名前と短い名前が適度に現れるとプログラムが読み易くなります。

変数名の一般的な反意語

反意語を正確に使用しましょう、ということで、一般的な反意語が例示されています。

  • begin/end
  • first/last
  • locked/unlocked
  • min/max
  • next/previous
  • old/new
  • opened/closed
  • visible/invisible
  • source/target
  • source/destination
  • up/down

避けるべき名前

次のようなガイドラインが紹介されています。

  • 誤解を招くような名前や省略系を使わない
  • 意味が似ている名前をいくつも使わない
  • 意味は異なるが似ている名前を使わない
  • wrapとrapのように、同じような発音の名前を使わない
  • 名前に数字を使わない
  • 名前の綴りを故意に変えない
  • 綴りの間違いが多い単語は避ける
  • 大文字と小文字の違いだけで名前を区別しない
  • 複数の自然言語を組み合わせない
  • 標準ライブラリの型、変数、ルーチンの名前は使わない
  • 変数が表すものとまったく無関係な名前を使わない
  • 読みにくい文字が含まれた名前を使わない

やはりプログラムは母国語が英語圏の方が有利だなぁと思います。変数名もそうですが、特にドメインモデルの名前などは、抽象概念としてのニュアンスが重要になるので、日本人の開発者に上手く伝わらないことが多々あります。いっそJavaとかなら日本語で書いた方が生産性上がるのではないかとか考えてしまいます。
テーブル名を日本語のみで扱っているプロジェクトに関わったことがありますが、理解は早くなるけどタイピングがしんどいんですよね・・。