東方中央幻視台

瞼の裏に弾幕が飛び交う程度の能力 - 永夜抄Normalはそれなりに難しい。

目次

Blog 利用状況

ニュース

自己紹介

関連サイト

投稿カレンダー

  • スクリプトをダウンロード!

ブログパーツ

Adsense

書庫

日記カテゴリ

正常系が先か異常系が先かという問題

ネタもと:http://blogs.wankuma.com/ma2/archive/2008/06/05/141570.aspx?Pending=true

コメント連投気味だったので記事で書きます。

まずはネタもとのソースコードをもとにC#版の実装を書きます。

bool bReturn = false;
do {
    if(!Condition1)
        throw new SomeException("Some Error1");
    if(!Condition2)
        throw new SomeException("Some Error2");

    //実行する処理
    PrimarilyProcess();
   
    bReturn = true;
} while(false);
return bReturn;

ざっとこんな感じだったかと思いますが、結論として私はこの構文を多用します。
理由としては、

  1. サブメソッドに抽出するまでもない処理を独立的に記述できる。
  2. returnしたければ好きにできる。サブメソッドの結果を見る必要がない。
  3. 異常系の処理を先に書ける。

といったものがあります。

特に、異常系がが先だと一見可読性が落ちますが、出力視点からの処理の流れや堅牢性を考えると堅実な選択であると私は思います。

投稿日時 : 2008年6月5日 9:35

コメントを追加

# re: 正常系が先か異常系が先かという問題 2008/06/05 9:44 774RR

どー考えてもこの例ぢゃ while いらないぢゃん

# re: 正常系が先か異常系が先かという問題 2008/06/05 9:51 Hirotow

まあこれはサンプルですから。
一つの時にはdo-whileは使いませんね。
とりあえずこの場合はdo-whileは複数あるものと考えてください。

# re: 正常系が先か異常系が先かという問題 2008/06/05 10:58 いしだ

私もこんな感じで良く実装しますね。
正常ならcommitとか。

# re: 正常系が先か異常系が先かという問題 2008/06/05 11:00 NAL-6295

>サブメソッドに抽出するまでもない処理を独立的に記述できる。

ブロックの意味をメソッドアウトしないで明確化したいのであれば匿名メソッドという手段がありますよ。

# re: 正常系が先か異常系が先かという問題 2008/06/05 11:19 Hirotow

>匿名メソッド
それだとステップ実行できないのよね。

# re: 正常系が先か異常系が先かという問題 2008/06/05 11:20 melt

break じゃなくて throw なんですか?
これだと戻り値は必ず true になると思うんですけど...。

do~while 構文を使っている意味がよく分かりませんでした。

# re: 正常系が先か異常系が先かという問題 2008/06/05 11:30 みきぬ

わざわざdo~whileを使わず、単に { } で囲めばよいのではないかな、と。

# re: 正常系が先か異常系が先かという問題 2008/06/05 11:50 Hirotow

場合によってはメッセージボックス表示してbreakってのもありますので。
{}ブロックはたしかbreakできなかった気がします。
ちょっとサンプルがわかりにくかったようですね。

# [.NET]おっさんホイホイとしての Code Complete と,近くにあっても気付かない guard 句の話 2008/06/05 13:50 NyaRuRuの日記

VSS で管理しているのにソースの修正部分の差分をコメントとして残す - じゃんぬねっと日誌 カラwhileって使いますか? - ma2のblog - わんくま版(仮) 正常系が先か異常系が先かという問題 - Hirotow’s Craftive Blogs ガード句かぁ,じゃんぬねっとさんは『Code Complete

# re: 正常系が先か異常系が先かという問題 2008/06/05 22:37 NAL-6295

>>匿名メソッド
>それだとステップ実行できないのよね。

あれ、できませんでしたっけ・・・。
僕の記憶違いかな。

# re: 正常系が先か異常系が先かという問題 2008/06/06 7:20 NAL-6295

やはり、普通にステップ実行可能ですね。

タイトル  
名前  
URL
コメント