TOP設計・移行・活用> クラス
Javaコーディング規約
Javaコーディング規約

第3回:ネーミング規約(前編)
著者: 電通国際情報サービス  高安 厚思、東田 健宏
アイエックス・ナレッジ  河野 弥恵   2005/9/7
前のページ  1  2  3
クラス

   クラスに関する命名規約もパッケージの命名規約と同様に、誰が見てもわかるように命名する必要があります。しかしパッケージ名と混ざらないように、クラス名はパッケージ名とは別のルールで命名する必要があります。
クラス名は役割を表す名前にする(N_CLS007)

   クラス名には、機能IDや連番などの意味のわかりにくい名前を使用しないでください。「意味のある名前を使うこと」「省略しないこと」はパッケージ名の場合と同じ考え方です。

   機能IDや連番によるネーミングは、慣れた人間にはかえって使いやすい面もあります。スペルが短くなりますし、よく似た名前に惑わされることもありません。口頭の打ち合わせでは「何番のクラスを使う」といえば、聞き違いによるミスは少なく済みます。覚えてしまえば、数字を聞いただけで、パッとその機能が頭に浮かぶようになるかもしれません。

   しかし、システムの開発・メンテナンスがずっと同じメンバーによって行われるとは限りません。プロジェクトメンバーが変わらないことは、むしろ稀なことです。

   新しいメンバーにとっては、連番によるクラス名は記号でしかありません。その意味を理解するには、クラス名一覧などの設計資料に頼るしかなく、資料なしにはプログラムが読めなくなってしまいます。

   "a0001"や"mkAcc"などの抽象的な名前は避け、"makeAccount"のような具体的でわかりやすい名前をつけることによってクラスの内容を用意に連想できるようになり、ドキュメントに頼らなくても読みやすいコードとなります。


クラス名は単語の先頭を大文字にする(N_CLS001)

   クラス名は先頭を大文字にして下さい。クラス名が複数の単語で構成されている場合は、各単語の先頭(区切り)を大文字にします。これは、Javaの一般的なルールです。

   先頭を大文字にすることにより、すべて小文字で統一されているパッケージ名との区別が容易になることは、「パッケージ」の項で説明しました。では、単語の区切りを大文字にすることにはどのような効果があるでしょうか?まずは表4を見て下さい。

  1. 1. public class Sampleclass;(区切りなし)
  2. 2. public class Sample_class;(アンダースコアで区切る)
  3. 3. public class SampleClass;(単語の先頭を大文字にする)

表4:大文字、小文字の差

   1では、単語の区切りがどこかわかりません。2と3は、区切り位置が明確です。では、クラスメソッドを呼び出す場合はどうでしょうか?

  • 2. Sample_class.showData;(アンダースコアで区切る)
  • 3. SampleClass.showData;(単語の先頭を大文字にする)

表5:大文字、小文字の差(メソッド呼び出しの場合)

   アンダースコアで区切った場合、クラスだけを見たときには区切り位置がよくわかります。しかし、メソッドやクラス変数などのメンバーを指定する場合、クラスとメンバーの区切り位置のピリオドが埋もれてしまいます。

   こうして比べてみると、3が一番わかりやすい表記方法だということがよくわかります。


クラス名に準じて命名する(N_CLS002〜N_CLS006)

   例外クラス名に"Exception"を付けるのは、継承関係を見るまでもなく例外クラスだとわかるようにするためです。同じように、能力付加型のインターフェイス名の最後に"able"をつけるのは、インターフェイスの役割が一目でわかるようにするためです。

   クラス名を見てクラスのタイプが何かを判別できればいいので、プロジェクトごとにルールが決まっていれば必ずしもこの規約通りでなくてもかまいません。

   インターフェイスや抽象クラスなどは役割が特殊ですから、明確に区別がつくような工夫をしてもよいと思います。例えば、以下のような方法があげられます。

  • インターフェイス名の先頭に"I"を付ける
  • インターフェイス名に"I"を付けず、実装クラス名の語尾に"Impl"を付ける
  • 抽象クラス名は、"Abstract"からはじめ、その後にサブクラス名を連想させる名前を付ける

表6:特殊な命名ルール

   これらの方法は、先にあげた規約「クラス名は役割を表す名前にする」の拡張形といえます。それぞれの役割の表し方にも一定のルールを設けることにより、よりわかりやすい名前になります。


テストクラス

   テストと本番を間違えるようなことをなくすために、テストクラスの名称はテストだと明確にわかるようにしなければなりません。


テストには「Test」とつける(N_TCL001、N_TCL002)

   テストクラスに"Test"とつけることにより、テスト用モジュールだとすぐにわかります。

   テスト用モジュールを新プログラムと間違えて修正したり、誤ってテストモジュールをリリースしてしまったりという経験はありませんか?あるいは、テスト用モジュールと間違えて本番用モジュールを起動してしまったことはありませんか?

   事故を未然に防ぐために、テスト用モジュールには明らかに「テスト用」とわかる名前をつけるべきです。


次回は

   今回はネーミング規約について説明をはじめましたが、いかがでしょうか。名前をつける大切さをわかってもらえればと思います。次回は、メソッド、引数、変数全般、ローカル変数についてのネーミング規約について説明します。

前のページ  1  2  3


株式会社電通国際情報サービス 開発技術センター 高安 厚思
著者プロフィール
株式会社電通国際情報サービス  高安 厚思
株式会社電通国際情報サービス 開発技術センター
Java(J2EE)/オブジェクト指向の研究開発やプロジェクト支援、開発コンサルティングに従事。モデル、アーキテクチャ、プロセスが探求対象。今回は Javaコーディング規約2004の仕掛け人。


株式会社電通国際情報サービス 開発技術センター 東田 健宏
著者プロフィール
株式会社電通国際情報サービス  東田 健宏
株式会社電通国際情報サービス 開発技術センター
CTI、Webアプリの開発経験を経て、現在は主にプロジェクトマネジメント支援、プロセスエンジニアリング、ソフトウェア工学研究開発に従事。最近はコーチング、ファシリテーションといったヒューマン系スキルに興味を持ち日々修得に努めている。


アイエックス・ナレッジ株式会社 河野 弥恵
著者プロフィール
アイエックス・ナレッジ株式会社  河野 弥恵
アイエックス・ナレッジ株式会社 第1事業部所属
主にCOBOL、PL/1等のシステム開発に従事。コーディングに限らず、誰もが気持ちよく守れる規約を模索中。


INDEX
第3回:ネーミング規約(前編)
  はじめに
  大文字・小文字の違いで名前を区別しない(N_GNR002)
クラス