かってにコードいじって自己満足に浸る(3) 別
手元に下記のようなメソッドがある。
身バレ防止でだいぶ簡略にしてあるが実物はもっと改装が深くて条件が複雑である
public bool Judge(int p) { if (p == 4 || p == 7 || p == 13) return false; return true; }
別に動作には問題ないのだが機能追加でthis.value<40の場合には(p == 4 || p == 7 || p == 13)ではなく(p == 3 || p == 9)にする必要がある。
さて、どう改修したものか?
まず機能追加する前にやれることをやっておく。
比較対象を全部配列にうつしてContainsメソッドで判定する
public bool Judge(int p) { int[] v = new[] { 4, 7, 13 }; //配列 if(v.Contains(p)) //判定はContainsメソッドで return false; return true; }
これで今回の機能追加で変更する必要があるのはvの中身であろうということがうすうすわかる
public bool Judge(int p) { int[] v = new[] { 4, 7, 13 }; if (this.value1 < 40) //vの中身を変更 v = new[] { 3, 9 }; if(v.Contains(p)) return false; return true; }
v設定部分をメソッド抽出
public bool Judge(int p) { int[] v = NewMethod1(); if (v.Contains(p)) return false; return true; } private int[] NewMethod1() { int[] v = new[] { 4, 7, 13 }; if (this.value1 < 40) v = new[] { 3, 9 }; return v; }
vをインライン化
NewMethod1()の中身を整理
public bool Judge(int p) { if (NewMethod1().Contains(p)) return false; return true; } private int[] NewMethod1() { if (this.value1 < 40) return new[] { 3, 9 }; else return new[] { 4, 7, 13 }; }
Judgeメソッドのreturn部分を整理
public bool Judge(int p) { return !NewMethod1().Contains(p); } private int[] NewMethod1() { if (this.value1 < 40) return new[] { 3, 9 }; else return new[] { 4, 7, 13 }; }