達人プログラマー演習問題38
リファクタリングについての本はまだ読んでないんやけど、今読んでるamazon:達人プログラマーにリファクタリングの問題が載っていたからやってみた。
問題
以下のコードは何年もかけて幾度と無く修正されてきたものですが、その構造にまで遡ることなく変更されてきたことは明らかです。リファクタリングしてください。
if (state == TEXAS) { rate = TX_RATE; amt = base * TX_RATE; calc = 2 * basis(amt) + extra(amt) *1.05; } else if ( (state == OHIO) || (state ==NAINE) ) { rate = (state == OHIO) ? OH_RATE : MN_RATE; amt = base * rate; calc = 2 * basis(amt) + extra(amt) *1.05; if (state == OHIO) points = 2; } else{ rate == 1; amt = base; calc = 2 * basis(amt) + extra(amt) *1.05; }俺の回答
switch(state){ case TEXAS: rate = TX_RATE; break; case OHIO: rate = OH_RATE; break; case MAINE: rate = MN_RATE; break; default: rate = 1; points = 2; } amt = base * rate; calc = 2 * basis(amt) + extra(amt) * 1.05;
ってな感じでどうでしょう?だいぶ読み易くはなったと思うし、今後stateが増えてもcase文を増やせばいいだけになってます。
rubyとかで書くんやったらstateとrateをハッシュ配列を使って2次元テーブルにするのもありかも。