リファクタリング
最近マーティンファウラーの「リファクタリング」が面白くてよく読んでいるのですが、結構有名な本らしいのに、なんで今まで読んでいなかったのかと激しく後悔しています。
よく「きれいなソースコード」とか言ったりする時の、「きれいさ」って、実はどこからくるものなのかが、わかりやすい例と共に羅列してあって、読んでいて心地よい気分になってくるのです。
例えば、条件分岐ひとつをとっても、次のような例が示されています。
/*リファクタリング前(きたないコード)*/ if (date.before(SUMMER_START) || date.after(SUMMER_END)) charge = quantity * _winterRate + _winterServiceCharge; else charge = quantity * _summerRate;
/*リファクタリング後(きれいなコード)*/ if (notSummer(date)) charge = winterCharge(quantity); else charge = summerCharge(quantity);
要件を仕様に落とす際には、抽象的な表現を使いますが、それを実装に落とす場面で、具体化してしまうと上のリファクタリング前のようなコードになってしまうということですね。
実装時に、一旦ワンクッションかまして、抽象化したまま実装してしまうと、上のリファクタリング後のようなコードとなり、まるで仕様書に目を通すような感じでコードを見れるようになって非常にわかりやすいですね。
なんかこう、言われてみれば当たり前的なことなのかもしれませんが、長年プログラムを書いてきてあまり意識してこなかった部分に焦点を当てて考えるきっかけを与えてくれる本だと思います。