命名
規則(ネーミング
規則、ネーミング規約とも呼ばれる)とは、
プログラミングにおいて
ソースコード上の
識別子(変数、関数、クラスなどの名前)を決定するためのルールを定めたものです。これは、コードの
可読性、視認性、保守性を向上させることを目的としています。命名
規則は、
プログラミング言語の仕様、ハードウェアの制約、開発環境などに影響を受けることがあります。
命名規則を決める利点
命名
規則を定めることには、以下のような潜在的な利点があります。
ドキュメントとしての役割:
識別子の名前に、その使用法に関する追加情報(
メタデータ)を含めることで、
ソースコード自体がドキュメントとしての役割を果たす。
可読性の向上: 変数の使い回しを防ぎ、コードの
可読性を高め、バグの発生を抑制する。
一貫性の維持: プロジェクトや開発チーム内で命名
規則の一貫性を保ち、生産性とメンテナンス性を向上させる。
曖昧さの排除: 潜在的な曖昧さを回避し、コードの意味を明確化する。
検索性の向上: 検索置換ツールでの誤りを減らし、リファクタリングの自動化を容易にする。
成果物の品質向上: 短すぎる名前、長すぎる名前、意味不明な名前を排除し、成果物の見た目をプロフェッショナルにする。
名前の衝突回避: 複数のチームが開発したコードを統合・再利用する際に、名前の衝突(コンフリクト)を防ぐ。
命名規則の課題
命名
規則の選択と適用は、議論の的となりやすく、各人が最善と考える
規則が異なることがよくあります。また、確立された命名
規則を採用しても、その実施が一貫していなければ、混乱を招く可能性があります。一貫性がなく、覚えにくく、利点よりも欠点が多い命名
規則は、問題をさらに悪化させる可能性があります。
ビジネス上の価値
エンドユーザーが
識別子名の良し悪しを意識することはほとんどありませんが、システムを引き継ぐ開発者やアナリストにとっては、適切な
識別子が選定されていることで、システムの理解や修正・拡張が容易になります。
例えば、
C言語で書かれた以下のコードを比較してみましょう。
c
int a = 10;
int b = 20;
int c = a b;
このコードは文法的には正しいですが、意図や意味が不明確です。一方、以下のコードは、変数名に意味が込められているため、理解しやすくなります。
c
int monthly_pay_jpy = hours_worked hourly_pay_jpy;
適切な命名
規則に基づいて整理されたAPIや
ライブラリは、機能を推測しやすく、生産性の向上につながります。また、ソースファイルや
ディレクトリの命名
規則も重要であり、適切な命名と分類・階層化によって、メンテナンス性が向上します。
命名規則の要素
命名
規則は、開発対象や環境に依存しますが、多くの
規則に共通する要素がいくつかあります。
識別子の長さ: 短い
識別子はタイプしやすいですが、意味が伝わりにくく、長すぎる
識別子はコードの
可読性を損なう可能性があります。適切な長さはケースバイケースで決める必要があります。
大文字/小文字と数字: 大文字と小文字の使い方を制限したり、意味を与えたりする命名
規則があります。
プログラミング言語によっては、大文字と小文字を区別しないものもあります。
複数の単語からなる識別子: 複数の単語を連結する場合、
区切り文字(ハイフン、アンダースコア)を使用したり、キャメルケース(単語の先頭を大文字にする)を使用したりする方法があります。
その他の記法
ハンガリアン記法: 変数名の接頭辞に
データ型や目的を示す情報を付加する記法。
言語固有の命名規則の例
C/C++:
予約語との衝突を避けるため、特定の接頭辞を使用することがあります。
Java: クラス名は大文字で始める、メソッド名や変数名は小文字で始める、
定数名はすべて大文字でアンダースコア区切りとする、などの
規則があります。
Smalltalk: クラス名は大文字からはじまるキャメルケース、局所変数は小文字からはじまるキャメルケースを使用します。
まとめ
適切な命名
規則は、コードの品質と保守性を高めるために不可欠です。プロジェクトやチームの要件に合わせて、一貫性のある命名
規則を確立し、それを遵守することが重要です。