かってにコードいじって自己満足に浸る
手元に下記のようなメソッドがある。
末尾returnを強制されてた人が書いたと思われる。
身バレ防止でだいぶ簡略にしてあるが実物はもっと改装が深くて条件が複雑である。
public bool IsSuccess() { bool flg = false; if (value1 > 50) { if (value2 < 30) { flg = true; } } return flg; }
別に動作には問題ないのだが個人的にはfalseになるのわかってるならさっさと脱出してほしいなあ、と思うものである。
従って動作を変えないように注意深く変更していく。
1-① 一番外側のif文にelse節をくっつける。
bool flg = false; if (value1 > 50) { if (value2 < 30) { flg = true; } } else //これつけた { } return flg;
1-② return flg;を一番外側のif節およびelse節の末尾に分配
bool flg = false; if (value1 > 50) { if (value2 < 30) { flg = true; } return flg; //これつけた } else { return flg; //これつけた } //これ消した return flg;
1-③ else節はfalseしか返さないのでreturn false;と書き換える
bool flg = false; if (value1 > 50) { if (value2 < 30) { flg = true; } return flg; } else { return false;//書き換えた }
1-④ 一番最初のif文の条件を反転させてif節とelse節の中身を入れ替える
bool flg = false; if (!(value1 > 50)) //条件反転 {//中身入れ替え return flg; } else {//中身入れ替え if (value2 < 30) { flg = true; } return flg; }
1-⑤ else{ }を除去 ({}の中は消さない) ※if{}の末尾でreturnしているのでelse{ }があってもなくても同じことである
bool flg = false; if (!(value1 > 50)) { return false; } if (value2 < 30) { flg = true; } return flg;
2番目のif文についても1番目のif文と同じ作業を実施
2-① else節をつける
2-② return flg;をif節およびelse節の末尾に分配
2-③ else節はfalseしか返さないのでreturn false;と書き換える
2-④ 条件を反転させてif節とelse節の中身を入れ替える
2-⑤ else{ }を除去 ({}の中は消さない)
bool flg = false; if (!(value1 > 50)) { return false; } if (!(value2 < 30)) { return false; } flg = true; return flg;
2-⑥ 最後のreturnはtrueしか返さないのでreturn true;に書き換える。
2-⑦ 出番のなくなったflgを除去
if (!(value1 > 50)) { return false; } if (!(value2 < 30)) { return false; } return true;
2-⑧ !(cond)を整理する
2-⑨ if文の中かっこを除去する
if (value1 <= 50) return false; if (value2 >= 30) return false; return true;
やってみての感想
・"条件を反転させてif節とelse節の中身を入れ替える"と"!(cond)を整理する"は若干怖い作業だなと思う。誰か自動化してくれ。
・コードの動きは動画にしたほうが理解されやすいような気がする。
・条件をすっきりさせられた気がする。
自己満足完了