http://blogs.wankuma.com/rti/archive/2008/09/26/157515.aspx
風邪をひいたようだ
の続きです。
いや、別に前回のエントリーと絡めたところで何か得られるものがあるという訳ではありません。
今日は、
風邪をこじらせてしまって
高熱が出ているので、会社を休んで自宅で寝ています。
そんな訳で、いつものように仕事しながら何かネタを書くこともできませんし、頭もフラフラするので、徒然なるままなエントリーをあげてみます。
で、まず最初に、頭に浮かんだのは、最近良く思うことについてです。
次に頭に浮かんだのが、流れ制御文を必要以上に記述しない方が良いのではないかと言うことを、最近良く思う・・・ということでした。
何故なら、単純に上から順次処理を実行させる場合と比較して、流れ制御部分にバグが潜む可能性の方が高いと思うからです。
例えば、以下のような書き方です。
if (this.IsHoge) {
return true;
}
return false;
このコードは、戻り値を変化させる目的を実現するために、if 分によってメソッドの処理の流れを制御しています。
つまり、条件が真なら、その後のコードは実行されないことを利用して書かれているため、その後のコードに変更を加える場合には、若干の注意が必要になります。
このコードは、比較演算結果を返すだけで同様の結果が得られます。
return this.IsHoge;
これによって、最初のコードに比べてバグが入る余地が少なくなると考えられます。
戻り値が bool 型ではない場合も、条件演算子を使うことで、流れ制御文を書くことを回避できます。
return this.IsHoge ? 1 : 0;
この記述も、最初のコードよりもバグが入る余地が少ないと考えられます。
また、反復処理による流れ制御も、なるべく排除するようにしています。
例えば、以下のコードは反復処理をすることで、目的となる結果を得ています。
しかし、反復処理自身が流れ制御ですし、その結果を戻す処理も処理の流れを制御するためのコードになっています。
private bool Search(string[] array, string target) {
foreach(var x in array) {
if (x == target) return true;
}
return false;
}
上記は LINQ を使うことで流れ制御文を書かずに済みます。
・・・と、ここまで書いて、ちょっと辛くなってきました。
続きは、また次の機会に書こうかと・・・orz