かってにコードいじって自己満足に浸る(2)
手元に下記のようなメソッドがある。
身バレ防止でだいぶ簡略にしてあるが実物はもっと改装が深くて条件が複雑である。
public void DoAnything() { if (value1 > 50) { if (value2 < 30) { DoWrite(); } } }
別に動作には問題ないのだが個人的にはDoWrite()を実行する条件をメソッドに切り出しておきたいなあ、と思うものである。
従って動作を変えないように注意深く変更していく。
1 まずはフラグ(flg)を用意
bool flg = false; //フラグ if (value1 > 50) { if (value2 < 30) { DoWrite(); } }
2 DoWrite()直前でフラグを立てる
bool flg = false; if (value1 > 50) { if (value2 < 30) { flg = true;//フラグが立ったよ DoWrite(); } }
3 DoWrite()をif(flg){ }で囲う
bool flg = false; if (value1 > 50) { if (value2 < 30) { flg = true; if (flg) //囲う { DoWrite(); } } }
4 if(flg)ブロックを一番外のifブロックの外に追い出す
bool flg = false; if (value1 > 50) { if (value2 < 30) { flg = true; } } if (flg) //追い出されました { DoWrite(); }
5 flgの宣言~flgの値を決定している部分をVisualStudioの"メソッドの抽出"
bool flg = NewMethod(); //メソッドにされてしもた if (flg) { DoWrite(); }
private bool NewMethod() //メソッドになりました { bool flg = false; if (value1 > 50) { if (value2 < 30) { flg = true; } } return flg; }
6 bool flg = NewMethod();のflgをVisualStudioの"インラインの一時変数"(これVS2010にはないんだよなぁ)
if (NewMethod())
{
DoWrite();
}
7 完成なう
public void DoAnything() { if (NewMethod()) { DoWrite(); } } private bool NewMethod() { bool flg = false; if (value1 > 50) { if (value2 < 30) { flg = true; } } return flg; }
やってみての感想
・条件が変わったときにNewMethod()の中身だけを変更すればいいことが明確になる。
自己満足完了