TOP
>
設計・移行・活用
> 引数
Javaコーディング規約
第4回:ネーミング規約(後編)
著者:
電通国際情報サービス 高安 厚思、東田 健宏
アイエックス・ナレッジ 河野 弥恵
2005/9/15
前のページ
1
2
3
次のページ
引数
引数の名前はパラメータなので、インスタンス変数との区別を明確にすべきです。そのためにはあらかじめルールを策定しておくとよいでしょう。
メソッドのパラメータ名とインスタンス変数名を一緒にしない(N_PRM001)
メソッドのパラメータには、クラスのメンバー名と競合する名前をつけないで下さい。同じ名前をつけると、メソッド内でその名前を見つけたときに、それがパラメータ名なのかインスタンス変数名なのかがわからなくなってしまいます。
しかし、どうしても同じ名前を使いたい場合もあります。メソッドのパラメータ名とインスタンス変数名に同じ名前が使用された場合、Javaではメソッドのパラメータ名として解釈されますが、初心者にはわかりづらく、勘違いからバグを作り込むことがよくあります。
あらかじめ表2のようなルールを明確に決めておくことで、事故を未然に防ぐことができます。
パラメータ名の先頭に"_"を付ける
インスタンス変数名の先頭に"_"を付ける
同じ名前になってしまう場合は、インスタンス変数にthisを使用する
表2:メソッド名のネーミング規則の一例
1と2を比べると、2はスコープがクラス全体に広がりますが、1はメソッド内のみで済みます。また、3のようにメソッド内で定義したインスタンス変数すべてに"this"をつけると、数が増えた場合ちょっと読みにくい傾向があるでしょう。状況に応じて、表2の1〜3を使いわけて下さい。
変数全般
その変数が何を意味して、どんな値が格納されるかが予測できる名前をつける必要があります。このことよって勘違いによるミスを軽減できます。
boolean変数はtrue/falseの状態がわかるようにする(N_VAL001)
この規約の意図は、メソッドの説明で紹介した規約「boolean変数を返すメソッド名はtrue/falseの状態がわかるようにする」と同じです。
例えば、「在庫の有無」を保持する変数は以下のように宣言すれば、表3の結果になることが明らかにわかります。
private boolean hasStock;
true → 在庫あり
false → 在庫なし
表3:宣言の結果予測
更に条件分岐では以下のように、読んで意味がすぐにわかるコードを書くことができます。
if (hasStock) ・・・・・
なお、"hasNoStock"のような否定形の変数名は意味がわかったとしても混乱を招くため、避けたほうが無難です。
if (! hasNoStock) ……
これより、boolean変数はtrue/falseの状態がわかる「肯定形」の名前をつけることをお奨めします。
定数はすべてstatic finalとし、すべて大文字、区切りは"_"(N_VAL002)
"static final"とするのは、宣言部を見てすぐに「定数」と判断できるためです。うっかり定数であることを忘れて別の値を代入することを避ける効果もあります。
定数に"大文字"を使うのは一般的なルールです。すべてに大文字を使うと必然的に区切り文字が必要となるため、"_"を使って区切ります。
すべて大文字にすることにより、小文字ではじまる一般の変数とは明確に区別できます。また、単語の先頭のみを大文字としているクラス名との区別も容易です。
変数名には役割の反映を(N_VAL003)
変数名もパッケージ名やメソッド名と同様に、役割のわかる名前をつけるべきです。
"a0001"のようなコード番号や"account → acc"、"number → num"のような省略形は避け、具体的でわかりやすいネーミングを心掛けて下さい。
特定のメソッド内でのみ使われるワーク変数についても同様です。一時的なものだからと、"str1"、"int1"のように型名の省略形を用いた変数名をつけていないでしょうか。このような変数名は、変数の役割がわからなくなるだけでなく、同じ変数名をもう1度宣言してしまう危険性があります。
「意味のある名前を使うこと」
このネーミング規約の基本ルールを常に意識して下さい。ただし、変数がごく狭いスコープでしか使われない場合は例外です。次の規約でそれを説明します。
前のページ
1
2
3
次のページ
著者プロフィール
株式会社電通国際情報サービス 高安 厚思
株式会社電通国際情報サービス 開発技術センター
Java(J2EE)/オブジェクト指向の研究開発やプロジェクト支援、開発コンサルティングに従事。モデル、アーキテクチャ、プロセスが探求対象。今回は Javaコーディング規約2004の仕掛け人。
著者プロフィール
株式会社電通国際情報サービス 東田 健宏
株式会社電通国際情報サービス 開発技術センター
CTI、Webアプリの開発経験を経て、現在は主にプロジェクトマネジメント支援、プロセスエンジニアリング、ソフトウェア工学研究開発に従事。最近はコーチング、ファシリテーションといったヒューマン系スキルに興味を持ち日々修得に努めている。
著者プロフィール
アイエックス・ナレッジ株式会社 河野 弥恵
アイエックス・ナレッジ株式会社 第1事業部所属
主にCOBOL、PL/1等のシステム開発に従事。コーディングに限らず、誰もが気持ちよく守れる規約を模索中。
INDEX
第4回:ネーミング規約(後編)
前回より
引数
ローカル変数