TOP設計・移行・活用> はじめに




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

第8回:文字操作・数値・日付に関するコーディング規約
著者: 電通国際情報サービス
高安 厚思、東田 健宏、青木 応樹   2005/11/15
1   2  3  4  次のページ
はじめに

   今回、説明する文字操作・数値・日付に関するコーディング規約は、規約違反の箇所が見つかった場合、比較的簡単にコードの修正ができてしまうものばかりです。

   簡単にコードの修正ができるという点から疎かにしてしまいがちですが、これらの規約に違反したコードを実装すると次のような問題を引き起こします。
  • 一見正しく動作しているようでも、状況によっては期待した通りに動かない
  • 仕様は満たしているが、リソース消費量が多い、またはパフォーマンスが悪い

表1:引き起こす問題

   このような問題が発生した場合、コードのどこが悪いのかを探すのは困難です。しかし、今回説明する規約をコーディング時に留意することにより、これらの問題を回避することができます。

   それでは早速、文字操作・数値・日付に関する規約について説明していきます。

本連載で紹介する規約に関しては、規約名のみを記述しています。規約そのものは、以下のURLからダウンロードして確認してください。
http://www.objectclub.jp/community/codingstandard/JavaCodingStandard2004.pdf
文字操作

   プログラムが意図したように動作しているために正しいコードを書いていると思い込んでいる場合がありますが、パフォーマンスの問題などから文字操作の際には推奨されるメソッドがあります。


文字列どうしが同じ値かを比較するときは、equals()メソッドを利用する(C_STR001)

   Stringが同じ文字列かどうかを比較するときに"=="を使用してはいけません。"=="を使用すると同じインスタンスかどうかを比較することになります。

悪い例
public boolean compare (String name, String anotherName) {
     if (return name == anotherName) {
          return true;
     }
     return false;
}
   次のように"equals"を使用すると、文字列同士の比較となります。

良い例
public boolean compare (String name, String anotherName) {
     if (name.equals(anotherName)) {
          return true;
     }
     return false;
}
   同一クラス内で文字列の内容が同じものを比較する場合、リテラルに"=="を使用してもうまくいくいきます。なぜなら、同一クラス内で文字列の内容が同じStringは、コンパイラが同じインスタンスに最適化するためです。

"=="で比較して一致してしまう場合
private String strTemp1 = "Literal";
private String strTemp2 = "Literal";

if(strTemp1 == strTemp2) { ⁄⁄ インスタンスが同じため、trueとなる
⁄⁄ ・・・
}
   上記のstrTemp1とstrTemp2は同じインスタンスとなり、"=="を使用した判定でもtrueが返されてしまい、"=="で文字列の比較ができていると勘違いしてしまいます。

   一方、strTemp1とstrTemp2が下記のように宣言されていると、"=="を使用した判定ではfalseが返されます。

private String strTemp1 = "Literal";
private String strTemp2 = new String ("Literal");

if(strTemp1 == strTemp2) { ⁄⁄ インスタンスが異なるため、falseとなる
⁄⁄ ・・・
}
1   2  3  4  次のページ

参考文献など
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アプリの開発経験を経て、現在は主にプロジェクトマネジメント支援、プロセスエンジニアリング、ソフトウェア工学研究開発に従事。最近はコーチング、ファシリテーションといったヒューマン系スキルに興味を持ち日々修得に努めている。


株式会社電通国際情報サービス 青木応樹
著者プロフィール
株式会社電通国際情報サービス  青木 応樹
株式会社電通国際情報サービス アウトソーシング事業部所属
主にJavaを用いたシステム開発に従事。最近は設計・マネジメントスキルの習得に励んでいます。


この記事の評価をお聞かせください
ボタンをクリックしますとウインドウが開きます。

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