第2回:コーディングレベルを上げるためには? (1/3)

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

第2回:コーディングレベルを上げるためには?
著者: 電通国際情報サービス  高安 厚思、東田 健宏
エー・ピー・アイ  森田 健    2005/8/23
1   2  3  次のページ
レベル3:読みやすくなっているが、コードを分割できていないプログラム

   レベル3のプログラムのソースコードは、レベル2の問題を克服し、コーディング規約もある程度遵守した可読性の高いものになっています。しかし、コードの修正といった保守性に問題があるものとなっています。
Text  レベル3のソースコード   (クリックするとソースコードが表示されます)
   レベル3のプログラムのソースコードには主に以下のような問題があります。

  • 商品情報の表示を変更するために2ヵ所の修正が必要
  • どこに何が書いてあるかソースコード全てを読むまで分からない
  • メソッドが長すぎる

表1:レベル3のソースコードの問題点


商品情報の表示を変更するために2ヵ所の修正が必要

   このレベル3のソースコードを見て違和感のない人もいるのではないでしょうか?ソースコードを見てみると、レベル1や2に比べて、インデントや変数のネーミングなどの規約を守っているため、問題点を把握しにくいかもしれません。

   しかし、商品情報の表示をするための似たようなコードが2ヵ所あります(36〜39行目、49〜52行目)。

   似たようなコードが複数の箇所にあるようなソースコードは、保守性を著しく低下させてしまいます。仕様変更が入った際に、コピーした複数のコードに対して同じような修正を行わなければなりません。こういった共通部分は1つにまとめます。

   ここでコーディングの心得が効いてきます。

   コーディングの心得、5ヶ条「同じコードを二度書かない
どこに何が書いてあるか全てを読むまでわからない

   レベル3は、mainメソッドしかありません。「どこで商品を用意し」「商品が売切れるまで処理を行い」「商品情報を表示しているか」は、mainメソッド全てを読むまで分かりません。

   「カメラショップの開店時に、商品内容を設定し」「商品が売切れるまで商いを行い」「店を閉める」といった、まとまりの有る処理をメソッドとして分割することです。


メソッドが長すぎる

   1つのメソッドの中でいろんな処理を行っているため、メソッドが長くなっています。きちんと役割分割されたプログラムのメソッドは、10行程になるといわれています。

   1メソッドの行数はコメントを含めて20行以下にするのが望ましいです。1メソッドの行数が20行を超えるようであれば、他に分割すべき点がないか、もう一度コードを読み直してみて下さい。

   メソッドの役割を1つにすれば、必然的にメソッドは短くなります。メソッドが短くなればソースコードを見て理解することも簡単になります。理解することが容易になれば、修正箇所をすぐに把握することができ、ソースコードの保守性が向上します。

   ここでコーディングの心得が効いてきます。

   コーディングの心得、5ヶ条「役割は1つに
レベル4:コード分割はできているが、オブジェクト指向にそったプログラミングができていない

   レベル4のプログラムのソースコードは、レベル3の保守性の問題を克服し、ある程度の水準に達しています。しかし、仕様変更の対応といった柔軟性や拡張性に問題があるものとなっています。

Text  レベル4のソースコード   (クリックするとソースコードが表示されます)
   レベル4のプログラムのソースコードには主に以下のような良い点と問題があります。

  • 保守性は高い
  • データをまとまりあるものとして扱っていない
  • オブジェクト指向を用いた設計手法を用いていない

表2:レベル4のソースコードの良い点と問題点


保守性は高い

   コーディングスタイルも守り、機能ごとにメソッド分割もされ、スコープも狭いために大変把握しやすいソースコードになっています。


データをまとまりあるものとして扱っていない

   保守性は高いソースコードですが、様々な仕様変更をどのように対応するか?という点について問題があります。

   商品データをひとつのまとまりとして取り扱っていないために、それぞれの変数の部分「String[] PRODUCT_NAMES」などを修正しなければなりません(7行目、8行目)。

   もし、商品が名前や価格などを持った1つのクラスとして取り扱えるようになっていれば、「カメラショップの開店時に、商品内容を設定する」という処理の時に、「商品名、価格、在庫、ポイントカードレート」を設定したクラスを「商品リスト」に構築するという方法で対応できるようになります。


オブジェクト指向を用いた設計手法を用いていない

   メソッド分割はできているが、クラス分割ができていないために手続き的なコーディングにとどまっています。

   商品を売るsellメソッドの部分について、扱う商品が増えるごとにif/switchを書き足さなければなりません。商品クラスが、自分自身は何で、扱える商品は何か?を知っていれば、if/switch制御文をなくすことができます(71行目、72行目、79行目)。

1   2  3  次のページ

参考文献など
Javaコーディング規約2004は以下のサイトおよび書籍として発表しています。本連載と共に参考にしてください。

「Javaコーディング規約2004」 http://www.objectclub.jp/community/codingstandard/JavaCodingStandard2004.pdf

「オブジェクト倶楽部」
Javaコーディング規約2004は、オブジェクト倶楽部で公開して頂いております。 http://www.objectclub.jp/

「超図解 Java ルールブック」
Javaコーディング規約が「超図解 Java ルールブック」という名前で書籍になりました。規約の詳しい内容に関しては本書籍をご覧ください。
http://www.x-media.co.jp/xbook/index.cfm?ID=6


Javaコーディング規約を理解するに際しての参考サイトをご紹介します。

「Code Conventions for the Java Programming Language」 http://java.sun.com/docs/codeconv/
※日本語訳を提供しているページ
http://www.tcct.zaq.ne.jp/ayato/programming/java/codeconv_jp/


Java コーディング規約を理解するに際しての参考書籍をご紹介します。

「Java の格言」
「Java の鉄則」
「リファクタリング - プログラミングの体質改善テクニック」
「The Elements of Java Style」
「Effective Java - プログラミング言語ガイド」
「Essential Java Style」

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


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


株式会社 エー・ピー・アイ 森田 健
著者プロフィール
株式会社 エー・ピー・アイ  森田 健
コードが単純になるには?見やすいコードを書くには?を日々模索しています。「コードがドキュメントだ」が、口癖な他称人間コンパイラ。


INDEX
第2回:コーディングレベルを上げるためには?
レベル3:読みやすくなっているが、コードを分割できていないプログラム
  レベル5:柔軟性/拡張性が高いプログラム
  レベル4を抜けるためには?
Javaコーディング規約
第1回 良いコードとは、心得5ヶ条
第2回 コーディングレベルを上げるためには?
第3回 ネーミング規約(前編)
第4回 ネーミング規約(後編)
第5回 フォーマットに関するコーディング規約
第6回 オブジェクト指向のためのコーディング規約
第7回 変数に関するコーディング規約
第8回 文字操作・数値・日付に関するコーディング規約
第9回 継承とインスタンスに関わるコーディング規約
第10回 制御構造に関する規約
第11回 コレクション・ストリーム・例外に関するコーディング規約
第12回 スレッド・ガベージコレクションに関するコーディング規約

人気記事トップ10

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

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