サイレントマジョリティはかく紡ぐ
If 変数1 = True Then 変数2 = True Else 変数2 = False End If
変数2 = 変数1
5分の1で済むんですけど。
If 条件 Then ' コードブロックA 10行 ' コードブロックB 50行 Else ' コードブロックC 10行 ' コードブロックB 50行 End If
自然言語的にするとこう
あなたが男性なら
10ポイントです
ご利用ありがとうございました!
そうでなければ
30ポイントです
ご利用ありがとうございました!
ヘンじゃね?
っていうか
- 可読性が低い
Ifブロックを全部読んで、ThenブロックとElseブロックをなんども見返して(切り取ってdiffするけど)、60行中の50行を同定するのに(というより、同じものだと気づくのに)どれだけ時間がかかるか。
- 変更容易性が低い
ThenブロックとElseブロックの同じコンテキストに仕様変更があったとすると、同じ修正をしなければいけないし、テストも倍になるし。
こんなコードで何十万行、何百万行っていうシステムはザラにあります。
数万行程度のシステムならまだしも、保守性が低くて困ったものです。
「条件分岐があったらelseを無くせないか考える」というリファクタリング可要素以外にも、無駄なコードは沢山あります。
- 全く同じ振る舞いの別名メソッド
- 例外処理機構を使ってない
- 繰り返し現れるコンテキスト
ようは繰り返しだらけなわけです。*3
だいたいこんなコメントだらけになってます。*4
' ↓#0010001 仕変対応 HogeクラスのMogeメソッドからコピー なんたらかんたら なんたらかんたら なんたらかんたら ' ↓#0010051 バグ対応 xxxする様修正 HogeクラスのMogeメソッドも要修正 なんたらかんたら なんたらかんたら ' ↓#0010224 バグ対応 yyy箇所をコメントアウト なんたらかんたら ' ↑#0010224 なんたらかんたら ' ↑#0010051 なんたらかんたら なんたらかんたら なんたらかんたら なんたらかんたら ' ↑#0010001
なんて親切!
どうしてこうなった?
『コピペ』
これに尽きるでしょう。
自分で書きたくないからです。
バグってた時「元がそうだったから」と言えるからです。
下請けPGerのこの心理状態が仕方ない事は認めざるを得ないでしょう。。*5
冗長コードを無くせる「夢のリファクタリングツール」が必要です。
そんなもの無いですが。
んじゃ、、冗長コードを最初から書いて貰わないようにする事が大事!
TDDでテストコードを最初に書いて貰うようにすれば、テストパスが最小になるように実装するはず!
テストコードもコピペするしwwwww