|
|
前のページ 1 2 3
|
|
ローカル変数
|
今までにも説明してきたように、名前には意味を持たせる必要がありました。しかしローカル変数の場合は、スコープが狭いことから変数を識別することが容易なため、限定的に省略した名前を使っても構いません。その場合は、省略する境界線を間違えないように気をつける必要があります。
|
スコープが狭い変数名は省略した名前でもよい(N_LVL001)
|
本来、変数名には役割を反映した名前を用いるべきですが、スコープが狭い変数は識別が比較的容易なため、省略した名前を用いても構いません。スコープが狭いとは、行数が少なく、ネストされたブロックが含まれていないことをいいます。以下の例を見て下さい。
|
public static void main(String[] args){
String str1 = “一行:”; //違反
try{
String str2 = br.readLine(); //違反ではない
System.out.print(str1);
System.out.println(str2);
br.close();
}catch(IOException e){
e.printStackTrace();
}
}
|
|
"str2"は"try 〜 catch"ブロックの中で宣言され、中でも使用されています。ブロック内だけで有効な変数ですので、省略した名前で問題ありません。
"str1"は"try"ブロックの外で宣言されています。"str1"のスコープはmainメソッド全体となりますので、省略した変数名は規約違反です。こういう場合は、意味のある名前をつけるようにして下さい。
省略名を用いてもよい範囲の目安は、「一目で判読できる範囲」です。
|
for文のループカウンタは、ネストごとに"i"、"j"、"k"、…を使う(N_LVL002)
|
ループカウンタに"i"、"j"、"k"を使うのは、C言語などからの習慣です。for文の中だけで有効となるループカウンタには、むしろシンプルな名前を用いた方がよいと思います。
"i"、"j"、"k"でなく、"cnt1"、"cnt2"、"cnt3"などを使う方もいると思います。これは習慣の問題ですので、プロジェクト全体で統一する必要はありませんが、ソースコード単位では統一すべきです。
|
まとめ
|
ここまでネーミング規約について述べてきましたが、すべての規約は、次の4つのルールに集約されます。
- 意味のある名前を使うこと
- "a00001"のような記号や番号ではなく、役割を表す文字列を使う
名前を省略しないこと
- "class" → "cls"のような省略形を使わない
1つのものに1つの名前をつけること
- 役割の異なるものには同じ名前をつけない
表記を統一すること
- 大文字や小文字の使いわけなどを統一する
|
表3:ネーミング規約4つのルール
|
この4つのルールは、ネーミング規約を通して一貫したポリシーです。そして最終的には「ドキュメントに頼らず、文章のように通読して意味のとれるプログラム」に繋がっていきます。
今回紹介したネーミング規約は1つの例として捉えて下さい。4つの基本ルールに反していなければ、プロジェクトごとにネーミング規約を作って利用するのも問題ありません。ただし、利用しやすく、守りやすい形にしたうえで、プロジェクト内で統一するのが重要です。また、SunのCode Conventions for the Java Programming Language(http://java.sun.com/docs/codeconv/)については守るようにするのが無難です。
前回でも書いたように、ネーミング規約の利用目的は、「ソースコードの可読性の向上」です。第1回で紹介した「コーディングの心得5ヶ条」も、その筆頭に「見やすさを重視せよ」とあります。ネーミング規約の利用による可読性の向上は、5ヶ条の目指す「良いコード」への最初の一歩です。
その効用は他人の書いたソースコードを読む時に限りません。自分の書いたソースコードを読み返すときにも、その効果を発揮します。例えば、コーディングの過程においても、個々のクラスやメソッド、変数などの役割が明確になり、処理内容の把握が容易になるため、ケアレスミスによる無用なバグの発生を減らし、作業を円滑にすることが期待できます。
ネーミング規約は決して「作業効率を下げるだけの煩わしい規則」ではないことがわかって頂けたかと思います。ネーミング規約を上手く利用することによって、より可読性の高い、即ち「保守性が高く」「生産性の高い」コードを書くことができます。保守性と生産性の向上のために、ネーミング規約の積極的な活用をお奨めします。
|
前のページ 1 2 3
|
|
|
|
著者プロフィール
株式会社電通国際情報サービス 高安 厚思
株式会社電通国際情報サービス 開発技術センター
Java(J2EE)/オブジェクト指向の研究開発やプロジェクト支援、開発コンサルティングに従事。モデル、アーキテクチャ、プロセスが探求対象。今回は Javaコーディング規約2004の仕掛け人。
|
|
著者プロフィール
株式会社電通国際情報サービス 東田 健宏
株式会社電通国際情報サービス 開発技術センター
CTI、Webアプリの開発経験を経て、現在は主にプロジェクトマネジメント支援、プロセスエンジニアリング、ソフトウェア工学研究開発に従事。最近はコーチング、ファシリテーションといったヒューマン系スキルに興味を持ち日々修得に努めている。
|
|
著者プロフィール
アイエックス・ナレッジ株式会社 河野 弥恵
アイエックス・ナレッジ株式会社 第1事業部所属
主にCOBOL、PL/1等のシステム開発に従事。コーディングに限らず、誰もが気持ちよく守れる規約を模索中。
|
|
|
|