R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

風邪をこじらせたようだ

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

 

投稿日時 : 2008年9月29日 19:14

Feedback

# re: 風邪をこじらせたようだ 2008/09/29 21:44 NyaRuRu

テーマとしては、「(『Code Complete』的な意味での)ガード句」VS「高機能な式」という感じですかね。
http://d.hatena.ne.jp/NyaRuRu/20080605/p1

私も最近は「(『Code Complete』的な意味での)ガード句」が嫌いです。
代わりに強力なパターンガードを持った言語や、maybe モナドや List モナドが利用できる言語を好んで使っています。もちろん LINQ もこの用途に便利ですね。

LINQ の次は、パターンマッチが強力な言語を使ってみると色々参考になると思いますよ。

# re: 風邪をこじらせたようだ 2008/09/30 15:10 R・田中一郎

>LINQ の次は、パターンマッチが強力な言語を使ってみると色々参考になると思いますよ。

パターンマッチって、正規表現のようなものでしょうか?

考えてみれば、このエントリーのテーマという点で、正規表現って究極の手法だと思うのですけど・・・苦手なんですよね~orz

# なるべく流れ制御を回避する 2008/10/03 13:36 R.Tanaka.Ichiro's Blog

なるべく流れ制御を回避する

# なるべく流れ制御を回避する 2008/10/03 13:37 R.Tanaka.Ichiro's Blog

なるべく流れ制御を回避する

タイトル
名前
Url
コメント