Monday 11 August 2014

Code Review

Code Review 割とよくやります。今週末はプログラミング3の Code Review の予定です。

* Java の default package は禁止。かならず package 名を付ける。

default package だけ特別扱いされるので、あとで困ることが多い。

* Indent は空白、tab は禁止。うちは4文字 indent 標準。

hgweb でちゃんと表示されない。

* 不要な大域変数、シングルトン

大域変数は基本的に禁止。シングルトンも大域変数と同じなので、相応の理由がないと使わせないです。Unity が大域変数推進なので、ちょっと困ってます。

* 1,2 動きません

前項のが原因なことが多いけど、もう一つインスタンスを作ると動かなくなるコード。拡張性を確保するということですね。

* 局所変数の使い回し

違うことをする変数は違う変数として名前を付ける。変数の寿命を短くするということでもあります。寿命が短ければ、i とか k とかの名前で良い。

* 初期化されない変数

宣言時に値を入れておく。let 文ですね。while 文の外に値を持っていきたい時にできないことがある。while 文の中で return すると良い。

* コピペコード、重複コード

同じことが二度書いてある。あるいは、ちょっとだけ違う。間違いの元だし、保守性も低い。

* コメントで消してあるコード

版管理使っているのだから不要。他に方法があるならコメントに書く。あるいは切り替えられるようにする。

* ダメな名前

spell miss とか、createThread とか「何をするのかわからない」名前ね。メソッド名、クラス名、インスタンス変数名、ファイル名、package 名 いろいろ。

* 不要な型変数、継承

型変数に extends とか付けるのは変だと思う。おそらくは不要。継承するか移譲するかは迷うところだが、Java なら、基本、interface で書く。自明でない型変数(Generic)は、おそらく間違ってる。

* コンストラクタでの複雑な処理

オブジェクトの初期化は複雑な問題。複数のコンストラクタとか欲しくなる。その時にコンストラクタに複雑な処理が書いてあるとはまる。init メソッドとか、Factory とかに直す。

* 例外、エラーの見落とし

そこでエラーしたらどうなるの? とりあえず stack trace? Java のExceptionは遅いし。

* 同期関係の見落とし

Java で syncrhonized method を手で書くのは既に負けなのではないか。並列処理はあらゆる可能性を考えないと。特に初期化時にエラーが出やすい。Semaphor や Syncrhonized queue ですむなら、そうする。

No comments: