TOP設計・移行・活用> if文とelse文の繰り返しやswitch文の利用はなるべく避け、オブジェクト指向の手法を利用する(C_CTR010)
Javaコーディング規約
Javaコーディング規約

第10回:制御構造に関する規約
著者: 電通国際情報サービス  高安 厚思、東田 健宏
レッドフォックス  石井 宏和
   2005/12/21
前のページ  1  2  3  4
if文とelse文の繰り返しやswitch文の利用はなるべく避け、オブジェクト指向の手法を利用する(C_CTR010)

   ifやelse文の繰り返しやswitch文の利用はなるべく避けてください。switchやifかelse文が何度も繰り返されているコードは可読性が低下し、メンテナンス性の低下につながります。

   例えば状態遷移をif文かelse文で実装すると、仕様変更により新しい遷移が追加された場合に徐々にネストが増加していきます。ネストが深くなると、それだけ可読性が低下します。

   度重なる仕様変更により分岐が頻繁に追加されるような場合の時は、ポリモフィズムやデザインパターンなどの利用を検討してください。

   なお、この規約はJava特有のものではありません。


繰り返し処理の内部でtryブロックを利用しない(例外あり)(C_CTR011)

   ループの中にtryやcatchブロックはできるだけ置かないでください。これは、パフォーマンスの低下につながり、ループ内の処理も見づらくなります。

   特に理由がない場合はループの外でtryかcatchを行ってください。ただしループ内で例外をキャッチした場合に、適宜例外処理をしてループ処理を最後まで実行したい場合はこの限りではありません。

ループ処理を最後まで実行したい場合の例
// ループ内部にtryやcatch ブロック
for ( int i = 0; i < size; i++ ) {
     try {
          int num = Integer.parseInt( str[i] );
     } catch ( NumberFormatException e ) {
          // 数値でない文字列の場合は-1を代入してループを実行する
          num = -1;
     }
}

   なお、この規約はJava特有ものになります。


まとめ

   今回は、制御構造に関するコーディング規約を紹介してきました。はじめにでもお伝えしたとおり規約には表1の2つがありました。

  • Java言語特有の制御構造に関する規約
  • Java言語特有ではない制御構造に関する規約

表1:制御構造に関する規約の分類(再掲)

   今回は、前者についてはオブジェクトの生成やtry-catch文にかかわる部分の制御構造などを例として取りあげ、後者についてはforとwhile文、ifとelse文などを例として取りあげました。

   今回説明した規約を守ることによって、表4にあげる効果が期待できることが理解頂けたのではないでしょうか。

  • バグの発生率が低下する
  • コードの可読性が向上する
  • パフォーマンスが向上する
  • 追加拡張が安易になる

表4:今回の規約を守る利点

   しかし単純にコーディング規約をすべて採用することが良いかどうかは、ケースバイケースです。設計の方針やプロジェクトの方針によって、コーディング規約を適宜取捨選択していくことが大切です。

   表4にあげた4点の効果を最大限に享受できるよう、今回説明した規約を取捨選択して頂ければと思います。

前のページ  1  2  3  4


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


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


レッドフォックス株式会社 石井 宏和
著者プロフィール
レッドフォックス株式会社  石井 宏和
レッドフォックス株式会社 システムインテグレーションサービス1部所属
主に現在までJavaによるスタンドアロンアプリ・WEBアプリケーションの開発および保守に従事。現在は何故かABAPによる保守業務も担当。また日経新聞の記事感想を日課として、1年間社内で書き続けた。「綺麗なコーディングは綺麗な文章から」をモットーに、コーディング・文章センスを共に磨いている。


INDEX
第10回:制御構造に関する規約
  はじめに
  if/whileの条件式で"="は利用しない(C_CTR003)
  繰り返し処理中のオブジェクトの生成は最小限にする(C_CTR009)
if文とelse文の繰り返しやswitch文の利用はなるべく避け、オブジェクト指向の手法を利用する(C_CTR010)