プログラマにとってリファクタリングは重要です。
重要というよりリファクタリングしなければプログラミングといえないんじゃないかとも思っています。
リファクタリングを繰り返すことによってソースが完成するからです。
リファクタリング
リファクタリングとは簡単に言えばソースをきれいにすることです。
ソース自体を適切な状態にすることです。
- 読み易くする
- メンテしやすくする
- パフォーマンスを上げる
- 重複ロジックを減らす
などがありますが、これをしない人が多い印象です。
多くのプログラマはリファクタリングしない
私の携わったプロジェクトのレベルが低かっただけなのか、本当にリファクタリングする人が少なく感じます。
コーディングする時も「工夫しなさすぎやろ」という人も多かったです。
例えばクラスの作り方がわからないためにif文で逃げたりとか。
今のプロジェクトもif文だらけになってます(´д`;)
これもクラス設計自体させてもらえるプロジェクトがすくないからでしょうね・・・。
百歩譲ってクラス設計できないにしても
コピペ多すぎやろと。
これはベテランさんでも普通にやってるんですよねぇ・・・。
一部だけロジックが違うという。
積極的にリファクタリングしましょうよ。
ちゃんと考えてロジック組もうよ。
すんません、なんか愚痴になりました。
ロジックで気になるところ
そんな人が多いように感じる今日この頃ですが、私が日々「なんだかなぁ」と思う点を挙げてみます。
- 変数にしない
- メソッドにしない
- ループしない
- 変数名が適当すぎる
- コメントしない
1個ずつ見てみます。
※今PHPプロジェクトに携わっているので例はPHPで書いてます。
変数にしない
これ、多い。
例えば以下のような分岐があったとします。
条件ごとに3つ目の引数だけが変わるという例です。
if ($var == 1) {
$obj->method($a, $b, $c);
} else {
$obj->method($a, $b, $d);
}
メソッドの引数が増えたら条件分岐内を全部触るの?
if文の条件分岐が5つとかだったら5か所触るの?
ここではこうすべきですね。
if ($var == 1) {
$arg = $c;
} else {
$arg = $d;
}
$obj->method($a, $b, $arg);
たいしたことなさそうですが、こういう些細なところでもクセ付けしとかないといいロジックは書けないと思います。
メソッドにしない
これも多い。
基本的にコピペする人がやりがちです。
20行くらいのロジックがあってそれを複数個所で書いてあるものです。
違いは20行のうちの1,2行だけだったりするのでメソッドにしましょう。
最近かかわったものでは200行くらいのロジックの中で違いが20行くらいのロジックがありました。
親クラスで吸収するように修正しましたが、どえらい時間かかりました。
ループしない
メソッドにしないパターンと似てます。
同じロジックを繰り返し記述するやつです。
カッコ悪いやつです。
forなどでループしましょう。
変数名が適当すぎる
これは急いでいるときとかは誰でもやってしまいがちです。
私も・・・。
他に略しすぎてわけわからんとかもあります。
たとえば
$unm = $_POST['unm']; //user nameの略
とか、数か月後に見たら何の変数かわかりません。
こういう名前つける人に限ってコメント書いてないので余計にわけわかりません。
コメントしない
さっきの例でも少し出ましたがこれも多いですね。
少なくともロジックの意味、何のためにロジックをかいてあるかを書いてほしいです。
意味ないコメントとかもあります。
$var = 1; //変数に1を代入
この場合はなぜこの1を入れるかの理由と1は何を表すかを書くべきですね。
なんにせよ
プログラマならリファクタリングしまくりましょう!
皆が幸せになれる。はず。
クラス設計するときは親子関係を高さで意識する
続きを見る