Top Of Page いい名前 変数種による名前 命名規約 型付き名 名前の短縮 Bottom

変数名の力

はじめに名前ありき。
これは洋の東西を問わず、呪術魔術の基本として伝えられる語句です。
いきなり魔術や呪術や出してしまって引いてらっしゃる方も多いとは思いますが、コンピュータの世界ではプログラマは一種の魔法使いかもしれません。
プログラミング言語やスクリプトといった呪文、ミドルウェアやデータベースエンジンといった触媒を使いこなし、さまざまな現象を仮想空間に作り出します。
そして実際に、非常に優れた専門家は、敬意を込めて、同じ開発者から(特に英語圏では)こんな風に呼ばれます。
─ウィザード。

多くの系統の魔術や呪術では、「名前」というものは、すべての基本です。
「まじない」とはそうあるべく縛ること、そして最も強力で基本的な縛りが名前なのだそうです。
名前がないものは存在しないと同じ、名前は、それがそこにあることの証明でもあるのです。落ちているゴミも、ゴミという名前がついています。名前がつけられないものは、何でもないもの、つまりそこにあってもなくてもどうでもいいものということになるでしょう。
これは、少なくともプログラミングの世界では全く真理をついています。
名前が無いものは存在しないと同じです。
プログラマが変数名を決めるとき、その変数の役割が決められます。変数名の決定は、変数そのものが何を扱うのかという本質を縛り、プログラムをより理解しやすくするための、重大な儀式なのです。

いい名前

私の実家で飼っている犬の名前はコロといいます。犬の名前はどうつけてもいいんですが、変数の名前はそうはいきません。
これは、犬と犬の名前は別のものですが、変数と変数の名前は、本質的に同じものでなくてはならないからです。
いい名前というのは、プログラムの読みやすさの基本だということを認識して下さい。
具体的に、いい名前とはどんな名前でしょうか。
プログラムの世界では、次のようなガイドラインで命名されたものがいい名前だと考えています。
変数が表すものを完全に表現すると、長い名前になります。
しかし、長すぎる名前は、入力に手間取りますし、なにより…
長すぎる変数名なんて見たくないですよね?
試してみましょうか。
NumberOfSeatsInTheBIGEGG
ビッグエッグの座席数、を現してみたんですが。
見るのいやでしょう?
読み手にはそういう心理があるので、長すぎる変数名はその変数の意味をよく伝えることができません。
8から20文字くらいが、デバッグしやすいという調査報告があります。つまり短くて判りやすい名前が大事になる訳です。この点についてはまたあとで触れます。
より掘り下げて、名前の使われ方を分析してみましょう。

変数の種類による命名のガイドライン

変数は「データの入れ物」以外に処理の都合からいろいろな使われ方をします。
単純なループの制御変数は単純な名前(i や j や k など)でかまいません。
しかしそのループ制御変数をループの外側でも使用するなら、その変数に意味を持たせたほうがずっと読みやすくなります。
ループの始まりから終わりまでの長さが長いとき、ネストが深いときも意味を持たせたほうがいいでしょう。

テンポラリ変数は中間結果を格納したり、とりあえず必要な値を保存したりする変数です。tempやXなどを使う傾向にありますが、やめた方がよいでしょう。そのような名前を付けるときは、取り組むべき問題を十分に理解していないことが多いのです。
テンポラリ変数も、できるだけ意味を持たせた名前にしましょう。

BOOL変数は、なるべくケレン味がない、ストレートな変数名をつけましょう。TRUEかFALSEかの値を連想できる名前にします。たとえば:

中には、Isを先頭につけることを好むプログラマもいます。その場合はプログラムを通してIsをつけましょう。プログラム全体を通したきまりが重要なのです。
また、BOOL変数名にNotを付けないで下さい。対義語はかまいません。たとえば、NotSuccessではなく、Errorを使用しましょう。

命名規約

名前付けのルールのことを命名規約と呼びます。
命名規約は、一つのプログラム/プロジェクトを大人数で作る場合などに最大の効果を発揮しますが、それだけではありません。体系付けられた命名規約は、他のプログラマが自分のプログラムを調べ、変更するときに、そして、今作っているプログラムのことをすっかり忘れた未来の自分が自分のプログラムを調べ、変更するときに、重要なヒントをくれるのです。
どんな規約をつくればいいのでしょうか。ここに例を挙げますので参考にしていただければ幸いです。
たとえばm_はモジュール変数、g_はグローバル変数、c_は定数などです。
a_ をパラメータ=引数(Argument)にプレフィクスして、うっかりパラメータとローカルな変数に同じ名前をつけないようにするというのも非常に有効だと思います。(thanks: handle「虎之助」さん)
ポインタは言語によっては「ポインタ」の概念そのものがないので考慮しなくてもかまわないのですが、しかし「ポインタ」という概念をサポートしているプログラミング言語においては、ポインタは便利にして危険なものですので、あえてポインタだとわかるような名前をつけたほうがよいでしょう。

変数の型がわかる名前

(1/25/2000 add thanks! : handle「風水師」さん)
変数の型を変数名の最初につけて(プレフィクスするといいます)、プログラマが常にその型を意識してプログラミングする方法があります。
この手法として有名なのは、Windowsプログラミングの世界では事実上の標準になっている、ハンガリアンネーミング(ハンガリアン記法)という命名法です。
プレフィクス データ型
c char
by BYTE (unsigned char)
n int または short
x, y 座標を表す。short や int が使われる
cx, cy 幅と高さをあらわす。 count of X や count of Y である。
b, f BOOL値を表す。fはフラグの意
w WORD
l long
dw DWORD
p ポインタを表す
fn 関数を示す
s 文字列 (string)
sz ヌル終端文字列 (String terminated by Zero)
これらばハンガリアンネーミングのほんの一例です。
たとえば、C言語のコマンドライン文字列などは、pszCmdLine などになります。
こういった命名法を適用すると、型の不一致によるオーバーフローなどのバグを少なくするために、大きな効果を上げます。
実際に私も日常的に使用している命名法です。
しかしもちろん万能ではありません。
たとえば、最初int型だった変数 nScore を long に変更したら、変数名まで変えなければいけなくなります。(lScore)
このようにデメリットもありますので、適用の際にはその点も考慮して適用するかどうかを決定してください。

変数名の短縮

変数名は、何を表わすのか明確でなければなりません。しかし、上の項でも触れましたが、そういった名前は長くなりがちです。そこで現実には長い名前を省略して使用することが多くなります。
この省略のしかたでもコードの読みやすさは異なってくるのです。
これらは、省略のガイドラインです。
それぞれの項目はお互いに反するものもあります。(例えば「先頭にこない母音を削る」と「発音できる名前にする」はお互いに反してます。)
これらのガイドラインのすべてをクリアする必要などありませんし、またそれは不可能です。これらのガイドラインの中で、いくつかを組み合わせて、短くてなお判りやすい名前をつけるようにしましょう
特に最後の項目は忘れないで下さい。
私が尊敬する、ある先輩はこう言いました。
「変数名?決め手は愛だよ愛」
むう、至言です(笑)

つけてはいけない名前

人名には倫理的な問題でつけてはいけないような名前がありますが、変数名においては別の理由でつけないほうがいい名前があります。
変数名をいいかげんにつけると、コードの理解しやすさは損なわれます。
避けるべき変数名の付け方を挙げます。 特に、省略した変数は要注意です。省略した結果、似たような変数名になったり、発音が同じくなったりします。発音が同じくなると、チーム内で会話したりするときに、混乱します。この辺を巧く調整して、上手に名前をつけるのも、目立たないですが、プログラマの腕の見せ所です。

最後の「変数の意味しているものと関係がない名前」ですが、実際にいたんですよ、「最高得点」を表す変数名に「Cookie」なんて名前をつけてしまったプログラマが(^^;
こんな名前では、なにがなんだか…、ちなみに、これやったのは私です。若かった(゜゜)遠い目。


はじめに ルーチン モジュール 変数名の力 変数使用法 制御構造 レイアウト コメント テスト デバッグ 謝辞 Top of Site

Copyright (c) 2000 Takao Tamura