ガイドライン
1.public Variable
インスタンス変数は、極力public にせず、妥当なプロパティを設ける。
理由:オブジェクト指向の標準。クラスの内部状態に勝手にアクセスさせるのはよくない。ただし、以下の条件をすべて満たす場合、インスタンス変数をpublicにし、直接アクセスさせてもよい。
●そのインスタンス変数が他のインスタンス変数と独立であり、単独で変更されても内部の整合性をくずさない。
●どちらにしても,get / setアクセサを書く。
●インスタンス変数の実装が将来に渡って変更されないことが確定している。
インスタンス変数は、極力public にせず、妥当なプロパティを設ける。
理由:オブジェクト指向の標準。クラスの内部状態に勝手にアクセスさせるのはよくない。ただし、以下の条件をすべて満たす場合、インスタンス変数をpublicにし、直接アクセスさせてもよい。
●そのインスタンス変数が他のインスタンス変数と独立であり、単独で変更されても内部の整合性をくずさない。
●どちらにしても,get / setアクセサを書く。
●インスタンス変数の実装が将来に渡って変更されないことが確定している。
2.状態取得と状態変更の分離
メソッドは,「1つの事」を行うように設計せよ。特に、状態変更と状態取得の2つのサービスを1つのメソッドで行わない。状態を変更するメソッドの return 値はvoidにせよ。
理由1:1つの事を行うメソッドの方が分かりやすい。
理由2:並行性の制御、例外の安全保証がしやすい。
理由3:サブクラス化による拡張がしやすい。
メソッドは,「1つの事」を行うように設計せよ。特に、状態変更と状態取得の2つのサービスを1つのメソッドで行わない。状態を変更するメソッドの return 値はvoidにせよ。
理由1:1つの事を行うメソッドの方が分かりやすい。
理由2:並行性の制御、例外の安全保証がしやすい。
理由3:サブクラス化による拡張がしやすい。
3.オブジェクトの同値比較
オブジェクトの比較では Equals() メソッドを使い、== , != を使うな。特に、Stringの比較では == , != を使用してはならない。
理由:もし実装者がEquals()を用意しているなら、それを使ってほしくて実装したはず。また、Stringの比較では設定により大文字/小文字が区別されない場合があるため。
オブジェクトの比較では Equals() メソッドを使い、== , != を使うな。特に、Stringの比較では == , != を使用してはならない。
理由:もし実装者がEquals()を用意しているなら、それを使ってほしくて実装したはず。また、Stringの比較では設定により大文字/小文字が区別されない場合があるため。
4.宣言と初期化
ローカル変数は、初期値と共に宣言すること。
ローカル変数は、初期値と共に宣言すること。
5.大小比較演算子
大小の方向を統一することを目的として、
“<”、 “<=” を使い、”>”、 “>=” はなるべく避けること。
大小の方向を統一することを目的として、
“<”、 “<=” を使い、”>”、 “>=” はなるべく避けること。
6.メソッド引数の変更は悪
原則としてメソッドの引数は入力であり、出力としては使わないこと。すなわちメソッド内部で引数の状態を変更するメソッドを呼ばないこと。出力引数に新たなオブジェクトを代入しないこと。
悪い例:
void MoveX(Point p, int dx) {
p.X = p.X() + dx; // 引数を変更している(なるべく避ける)
}
void MoveX(Point p, int dx) {
Point p = New Point(p.X + dx, p.Y);
// これは呼び出し側に伝わらない
}
例外:パフォーマンスを気にする場合。
原則としてメソッドの引数は入力であり、出力としては使わないこと。すなわちメソッド内部で引数の状態を変更するメソッドを呼ばないこと。出力引数に新たなオブジェクトを代入しないこと。
悪い例:
void MoveX(Point p, int dx) {
p.X = p.X() + dx; // 引数を変更している(なるべく避ける)
}
void MoveX(Point p, int dx) {
Point p = New Point(p.X + dx, p.Y);
// これは呼び出し側に伝わらない
}
例外:パフォーマンスを気にする場合。
7.パフォーマンス調整は二の次
複雑な処理の場合、最初からパフォーマンスを気にしたコーディングをするべきではない。先に可読性、保守性を優先する。
複雑な処理の場合、最初からパフォーマンスを気にしたコーディングをするべきではない。先に可読性、保守性を優先する。