プログラミングをするうえで、変数や関数などの識別子に名前を付けるという作業は避けて通れません。それだけに、識別子の命名法について考えてみる価値はあるでしょう。
そもそも人間は「名前を付ける」という一種の抽象化によってものを認識します。逆に「適切な名前を付けられない」ということは、その変数や関数の意味を正確に把握していない証拠です。
そのため、識別子には意味のある名前を付けるよう心掛けましょう。たったそれだけのことでアルゴリズムが明確になり、バグも減ります。
また、識別子に名前を付ける際には、ある程度ルールを決めておくことが大切です。命名のしかたがバラバラだと、プログラムが読みづらくなってしまいます。
ルール1:大文字と小文字
識別子のスタイルには、大きく分けて次のような4つのパターンがあります。
- アッパーキャメルケース:
HowToNameIdentifiers
- ローワーキャメルケース:
howToNameIdentifiers
- スネークケース:
how_to_name_identifiers
- スクリーミングスネークケース:
HOW_TO_NAME_IDENTIFIERS
C言語によるソフトウェア開発が主流だった頃には、スネークケースが使われる場面が多くありました。
いろいろなプログラミング言語が使われている現在では、
- クラスなどの型の名前にはアッパーキャメルケース
- メソッドや変数の名前にはローワーキャメルケース
と、使い分けることも多くなっています。
というわけで、何をどのパターンで命名するかルールを決めておきましょう。
ルール2:関数やメソッドの名前
- 動作をともなう関数:
fopen()
やmalloc()
など - 値を返すだけの関数:
strlen()
やceil()
など
前者には、「何かをするぞ」という意味を込めて動詞を使った名前を付けるのがおすすめです。後者については、「この情報が見たい」という意味で名詞を使った名前にするとよいでしょう。
例えば、線形リストのデータを扱う関数なら、次のような感じです。
- ノードを追加・削除する関数は動詞:
AppendNode()
やRemoveNode()
など - ノードを取り出す関数は名詞:
FirstNode()
やNextNodoe()
など
ルール3:変数名のプレフィックス
C言語やC++では変数名をローワーキャメルケースにして、最初の単語を「型を表すプレフィックス」にしておくのがおすすめです。プレフィックスには、次のようなものが考えられます。
n
:整数値を表すb
:ブーリアンを表すp
:ポインタを表す
例えば、次のように使います。
int nValue = 123; /* ← 整数値 */
int *pValue = &nValue; /* ← ポインタ(より明確に pnValue とするのもあり) */
ちなみに、最近の(モダンな)プログラミング言語では、こういったプレフィックが必要になる場面はそれほどありません。
ルール4:ブーリアンの意味
true
でどちらがfalse
なのかがはっきり分かる名前を付けましょう。
例えば、エラーの有無を表す変数がbResult
だと、エラーがあったときにtrue
なのか、なかったときにtrue
なのか分かりません。こういう場合は、bSuccess
やbError
のような、判定のしかたで迷わない名前を付けます。
ブーリアンを返す関数についても、同じようなことがいえます。例えば、通信の接続状態を返す関数に名前を付けるとしたら、ConnectionStatus()
とするよりIsConnected()
としたほうが、どちらがtrue
なのか明確ですね。
ルール5:よく使う省略形
省略形には、次のようなものが考えられます。
Cnt
:Countの略(個数を表す)Idx
:Indexの略(項目番号や添字を表す)Pos
:Positionの略(位置を表す)Len
:Lengthの略(長さを表す)
ちなみに、Numberを略してNum
とするのは、おすすめしません。「Number of(〜の個数)」なのか、それとも「Index of(〜の項目番号)」なのかが、一目で分からない場合が多いためです。
もちろん、省略形を使わないルールにするのもありです。
ルール6:よく使う対義語
例えば、「Start」の反対は「End」なのか「Stop」なのかなど、基本とするルールを決めておきましょう。
Start
とStop
Begin
とEnd
Create
とDestroy
LHS
とRHS
(「左側(Left Hand Side)」と「右側(Right Hand Side)」のこと)
ルール7:名前の長さ
長い名前を付けた変数や関数は、プログラム中でよく目立ちます。目立たせたい(重要な)ものほど、長くてしっかりとした名前を付けるようにしましょう。
これとは反対に、変数にあえて短い名前を付けると良いこともあります。例えば、ループカウンタにはi
という名前が使われることが多いですね。これは、一時的な変数だということを表すのに適した名前だといえます。
チームで開発をするときはもちろん、ひとりで開発をするときもこれらの命名法を意識しておくのがおすすめです。作ってから時間が経ったとしても、どんなプログラムにしたかを思い出しやすくなるでしょう。