リファクタリング
きっかけ
仕事で機能追加や不具合修正をしていますが、綺麗に書かれてないソースを変更するの
めっちゃ大変です。何よりデグレが怖い!!
影響範囲はここまでだと思ってテストしても、思わぬところでバグが残ってたりすることもあります。
綺麗に書かれたプログラムなら修正範囲も明確になって、テストも簡単になって、リリースまでの
スピードも上がるんだろうな〜と夢みながらリファクタリングについて勉強しようと思いました。
リファクタリングについて勉強したこと感じたことを書いていきたいと思います。
リファクタリングとは
ソフトウェアの外部の振る舞いを保ったままで、内部の構造を改善していく作業。
これがプログラムの読みやすさや機能回収のしやすさにつながっていきます。
また、リファクタリングによって、設計書作業が最初の工程で集中的に発生するのではなく、
全行程を通じて継続して行われるようになります。
実装しながら設計を常に意識しないといけないということですね。
設計者と実装者の境界がなくなっていくのかなとか思ったり。
例えば一時変数の削除
計算結果とかを一時変数に入れて使いまわしてました。
計算を何度もさせるのは無駄なのかなぁと思ってたんです。
例えばこんな感じで。
double kingaku = shohizei * tanka;
if (kingaku > 1000) {
return kingaku * 0.90;
} else {
return kingaku * 0.95;
}
それがこう置き換えられます。
↓
if (kingaku() > 1000) {
return kingaku() * 0.90;
} else {
return kingaku() * 0.95;
}
double kingaku() {
return shohizei * tanka;
}
メソッド作って何度も計算させます。
このメソッドは計算結果を返してるだけですが、ループする場合でもメソッド化して何度も呼びます。
その場合、処理速度が遅くなるのではと疑問が湧いてきますが、チューニングとリファクタリングの作業は分ける
という考え方が前提としてあります。
まず、リファクタリングでプログラム綺麗にしてから、チューニングのこと考えようということですね。
最後に
ここで書いたのはほんの少しでしたが、リファクタリングの勉強は新しい発見の連続で楽しかったです。
これを仕事でも生かし、後から見た人が読みやすい!!って思ってくれるソースを書いていきたいと思います。