第4回:ネーミング規約(後編) (3/3)

Javaコーディング規約
Javaコーディング規約

第4回:ネーミング規約(後編)
著者: 電通国際情報サービス  高安 厚思、東田 健宏
アイエックス・ナレッジ  河野 弥恵   2005/9/15
前のページ  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等のシステム開発に従事。コーディングに限らず、誰もが気持ちよく守れる規約を模索中。


INDEX
第4回:ネーミング規約(後編)
  前回より
  引数
ローカル変数
Javaコーディング規約
第1回 良いコードとは、心得5ヶ条
第2回 コーディングレベルを上げるためには?
第3回 ネーミング規約(前編)
第4回 ネーミング規約(後編)
第5回 フォーマットに関するコーディング規約
第6回 オブジェクト指向のためのコーディング規約
第7回 変数に関するコーディング規約
第8回 文字操作・数値・日付に関するコーディング規約
第9回 継承とインスタンスに関わるコーディング規約
第10回 制御構造に関する規約
第11回 コレクション・ストリーム・例外に関するコーディング規約
第12回 スレッド・ガベージコレクションに関するコーディング規約

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored