堅牢なプログラムを書くために意識すべきこと
変数は宣言と同時に初期化する(できるだけでOK)
初期化がどこでされているかわからない変数はバグの原因になりやすい。例えば、分岐処理の条件によって実行されない初期化があったりするとそれがバグの原因になり得る。(その場合Javaではコンパイルエラーになる。)可読性の観点からも。
変数を使いまわさない
変数の使い回しをするとデバッグが困難になることがある。再代入は極力避けるようにする。finalや不変オブジェクトを活用する。
変数のスコープを小さくする
変数のスコープが大きくなると追跡が難しくなる。フィールド変数をローカル変数に出来ないか、またブロックスコープを確認する。
オブジェクトの寿命を意識する
Javaではガベージコレクションによって、オブジェクトへの参照がなくなるとオブジェクトは消滅する。 変数からオブジェクトへの参照が外れる条件は以下のとき。
- ローカル変数およびパラメータ変数のスコープが外れた時
- オブジェクトがしたとき、インスタンスフィールド変数の参照が外れる
- クラスが消滅したとき、クラスフィールド変数からの参照が外れる
- 変数に別のオブジェクト参照・またはnullを再代入した時。
- メソッドチェーンを使用した際に、式の評価が終わったあと
また、ファクトリ-メソッド、シングルトンパターンの利用を検討する。
不変オブジェクトを活用する
バグの多くはオブジェクトの状態が不正に変化することで起きる。不変なオブジェクト(Stringクラス等)ならメソッドのパラメータとして渡した時に勝手に変更されることがないので、余計な心配をしなくても良くなる。
説明が足りないところが結構あるので、後で追記しよう・・・