最新Javaコーディング作法


最新Javaコーディング作法  プロが知るべき、107の規約と21の心得


日経BP社
著者:森崎雅稔
監修:渡辺純


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

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

書籍目次

Posted by shi-n