magazine.gif 最新Javaコーディング作法

はじめに
本書の構成と読み方

規約編
第1章 命名に関する規約

  • 1.1 命名全般
    • 規約1 名前には英単語を使用する
    • 規約2 大文字と小文字で名前を区別しない
  • 1.2 パッケージ
    • 規約3 パッケージ名はすべて小文字にする
    • 規約4 パッケージ名には省略語を使用しない
    • 規約5 インポートは「*」で省略しない
  • 1.3 クラス
    • 規約6 クラス名は役割を表す名前にする
    • 規約7 クラス名はPascal形式で記述する
    • 規約8 クラス名はフルスペルで記述する
    • 規約9 抽象クラス名の末尾に「Abstract」を付ける
    • 規約10 インタフェース名はクラス名に準ずる
    • 規約11 例外クラス名の末尾に「Exception」を付ける
    • 規約12 テストクラス名の末尾に「Test」を付ける
  • 1.4 メソッド
    • 規約13 メソッド名は目的のわかる名前にする
    • 規約14 メソッド名はCamel形式で記述する
    • 規約15 メソッドの役割の対称性を意識する
    • 規約16 ゲッターメソッド名は「get+属性名」とする
    • 規約17 セッターメソッド名は「set+属性名」とする
    • 規約18 booleanを返すメソッドはtrue/falseの識別がわかる名前にする
  • 1.5 変数・定数
    • 規約19 変数には意味のある名前を付ける
    • 規約20 変数名はCamel形式で記述する
    • 規約21 boolean型の変数はtrue/falseの識別がわかる名前にする
    • 規約22 GUIコンポーネントの命名にはコンポーネントの型を付加する
    • 規約23 引数名とフィールド名が同じになることを回避する
    • 規約24 定数名は「_」で区切った大文字表記とする

第2章コーディングに関する規約

  • 2.1 全般
    • 規約25 1つのクラスは1つのソースファイルで定義する
    • 規約26 推奨されないAPIを使用しない
    • 規約27 使われないコードは書かない
    • 規約28 クラスやメソッドのアクセス修飾子の宣言は適切な権限で行う
    • 規約29 メソッド定義とメソッド定義の間に空行を入れる
    • 規約30 プリミティブ型と参照型の違いを意識する
    • 規約31 ラッパークラス型よりプリミティブ型を使う
  • 2.2 スタイル
    • 規約32 クラス定義の記述順序を守る
    • 規約33 110桁を超える行は改行または文を分割する
    • 規約34 行の途中での改行は、カンマの後、演算子の前、節(予約後)の前とする
    • 規約35 クラスとメソッドの宣言行およびブロック開始行の末尾に「{」を記述する
    • 規約36 「{」の後ろにステートメントを記述しない
    • 規約37 インデントは半角の空白文字を使い4桁分とする
    • 規約38 ブロックの開始行と終了行のインデントを揃える
    • 規約39 ブロックの内部のインデントを揃える
    • 規約40 無駄な空行は入れず意味のある切れ目で入れる
    • 規約41 1行に2つ以上のステートメントを書かない
    • 規約42 比較演算子は「<」か「<=」を使う
    • 規約43 オートボクシングを使用しない
  • 2.3 クラス定義
    • 規約44 継承させたくないクラスにはfinal宣言をする
    • 規約45 クラスのtoStringメソッドを装備する
    • 規約46 メソッドのないインタフェースを定義せず定数クラスを使う
    • 規約47 定数クラスにはstaticイニシャライザを使う※JavaSE5以降
  • 2.4 メソッド定義
    • 規約48 メソッドの最大行数は150行とする
    • 規約49 循環的複雑度の上限を19とする
    • 規約50 オーバーライドさせたくないメソッドはfinal宣言をする
    • 規約51 メソッドの引数の順序には根拠がある
    • 規約52 配列やコレクションを返すメソッドではnullを返さない
    • 規約53 引数の数は少なめにする
    • 規約54 引数の正当性を検査する
    • 規約55 クラスメソッドを実行するときはクラス名を使って呼び出す
  • 2.5 変数・定数
    • 規約56 定数はstatic finalを宣言する
    • 規約57 リテラルは原則として使わず定数を使う
    • 規約58 配列の宣言は型名に「[]」を付けて行う
    • 規約59 配列は宣言時に大きさを明確にする
    • 規約60 2次元以上の配列を宣言しない
    • 規約61 配列のコピーにはarraycopyメソッドを使用する
    • 規約62 インスタンス変数は必ず初期化する
    • 規約63 インスタンス変数はprivateで宣言する
    • 規約64 むやみにアクセッサ(セッター、ゲッタ)を定義しない
    • 規約65 クラス変数にpublic static final宣言した配列を利用しない
    • 規約66 クラス変数はクラス名を使ってアクセスする
    • 規約67 ローカル変数名とフィールド名が同じになることを回避する
    • 規約68 ローカル変数は安易に再利用しない
    • 規約69 ローかす変数は使用する直前に初めて宣言と初期化を行う
  • 2.6 文字列操作
    • 規約70 更新される文字列にはStringBuilderを使用する※JavaSE5以降
    • 規約71 更新されない文字列にはStringを使用する
    • 規約72 プリミティブ型とStringオブジェクトとの変換には変換メソッドを使用する
  • 2.7 数値操作
    • 規約73 誤差のない計算をするにはBigDecimalを使用する
    • 規約74 数値の精度に気をつける
    • コラム Java SE7で規約はこう変わる(1)
    • 規約75 低精度なプリミティブ型にキャストしない
  • 2.8 継承
    • 規約76 スーパークラスのインスタンス変数をサブクラスで重複して定義しない
    • 規約77 スーパークラスのprivateメソッドと同名のメソッドをサブクラスで定義しない
    • 規約78 equalsメソッドを実装した場合にはhashCodeメソッドも実装する
    • 規約79 Cloneableインタフェースは明示的に実践する
  • 2.9 インスタンス
    • 規約80 オブジェクト同士はequalsメソッドで比較する
    • 規約81 instanceofをキャストの可否判断に使う
  • 2.10 制御構造
    • 規約82 制御文の「{}」は省略しない
    • 規約83 for文では3つのカウンタ条件を完備させる
    • 規約84 for文とwhile文を正しく使い分ける
    • 規約85 for文を利用した繰り返し処理の中でカウンタ変数の値を変更しない
    • 規約86 配列やコレクションを処理するループに拡張for文を使う※JavaSE5以降
    • 規約87 繰り返し中のオブジェクトの生成は要否を考える
    • 規約88 繰り返し処理のループの中にtry/catchブロックを記述しない
    • 規約89 switch文ではcaseごとにbreakを書く
    • 規約90 switch文ではdefaultを必ず書きbreakも書く
  • 2.11 コレクション
    • 規約91 CollectionやMapにはジェネリクスを使う※JavaSE5以降
    • コラム Java SE7で規約はこう変わる(2)
    • 規約92 オブジェクトの集合の繰り返し処理にはIteratorを使用する
  • 2.12 ストリーム操作
    • 規約93 ストリームを扱うときにはfinallyブロックでクローズ処理をする
    • コラム Java SE7で規約はこう変わる(3)
    • 規約94 ObjectOutputStreamではresetメソッドを使用する
    • 規約95 ストリームの操作でバッファ入出力を使う
  • 2.13 例外処理
    • 規約96 catch文でキャッチする例外は詳細な例外クラスでキャッチする
    • コラム Java SE7で規約はこう変わる(4)
    • 規約97 Exceptionクラスのオブジェクトを生成してスローしない
    • 規約98 finallyブロックには戻り値に影響がある記述をしない
      • 規約99 catchブロックでは必ず処理/Error、Throwableクラスを継承しない
  • 2.14 ガベージコレクション
    • 規約101 finalizaはオーバーライドしない
    • 規約102 アプリケーションからfinalizeを呼び出さない

第3章 コメント・アノテーションに関する規約

  • 3.1 全般
    • 規約103 コメントは説明したいコードの直前の行に記述する
    • 規約104 コメントは必要なものだけを簡潔に書く
    • 規約105 コメントアウトしたプログラムの断片を次工程まで放置しない
  • 3.2 javadoc
    • 規約106 Javadocの記述を揃える
  • 3.3 アノテーション
    • 規約107 オーバライドするメソッドにはOverrideアノテーションを使用する※Java SE5以降

解説編
第4章 規律のある実装と、開発マネージメントの心得

  • 4.1 最初にすること
  • 4.2 実装工程中にすること
  • 4.3 最後に

コラム Eclipseの静的解析とスタイルフォーマッター
コラム 市販の静的解析ツールによる規約遵守のチェック
コーディング規約適用観点一覧表
参考文献
索引