2016年1月14日木曜日

ねこもちです。 前回の続きで、処理を短くする系です。 ※処理そのものは短くなりませんね、良く考えると。パッと見の記述が短くなっているだけです。   ですが、これが本当に大事なことだと思います。 ■「ifのネストが多く、ifとelse節の対比が難しい」 下記のような関数があったとします。
void foo()
{
    var 結果A = 処理A();
    if( 結果A == 成功 )
    {
        var 結果B = 処理B();
        if( 結果B != 成功 )
        {
            var 結果C = 処理C();
            if( 結果C == 成功 )
            {
               処理D();
            }
            else
            {
                失敗Cのリカバリ処理;
                return 失敗C;
            }
        }
    }
    else
    {
        return 失敗A;
    }
    処理F();
    return 成功;
}
ifが3段もネストしていて、途中で抜けたり、抜けなかったり、 else節があったりなかったり、 このメソッドでは、何が起きるのかを知るのは非常に難しいのです。 まず、結果Aのifのネストを解消します。
void foo()
{
    var 結果A = 処理A();
    if( 結果A != 成功 )
    {
        return 失敗A;
    }
    var 結果B = 処理B();
    if( 結果B != 成功 )
    {
        var 結果C = 処理C();
        if( 結果C == 成功 )
        {
           処理D();
        }
        else
        {
            失敗Cのリカバリ処理;
            return 失敗C;
        }
     }
    処理F();
    return 成功;
}
次に、結果Bのifのネストを解消します。 結果Bが成功だったら、処理F()のあと成功返しているので、そのようにします。
void foo()
{
    var 結果A = 処理A();
    if( 結果A != 成功 )
    {
        return 失敗A;
    }
    var 結果B = 処理B();
    if( 結果B == 成功 )
    {
        処理F();
        return 成功;
    }
    var 結果C = 処理C();
    if( 結果C == 成功 )
    {
       処理D();
    }
    else
    {
        失敗Cのリカバリ処理;
        return 失敗C;
    }
    処理F();
    return 成功;
}
同様に結果Cのifもthen節でreturnするようにします。
void foo()
{
    var 結果A = 処理A();
    if( 結果A != 成功 )
    {
        return 失敗A;
    }
    var 結果B = 処理B();
    if( 結果B == 成功 )
    {
        処理F();
        return 成功;
    }
    var 結果C = 処理C();
    if( 結果C != 成功 )
    {
        失敗Cのリカバリ処理;
        return 失敗C;
    }
    処理D();
    処理F();
    return 成功;
}
こうすることで、処理と失敗時の処理が近づき、非常に読みやすくなりました。 こういう書き方のとき、このif群を「ガード節」というようです。

Related Posts:

  • カノニカルタグによくある間違いこんにちは山田です。 カノニカルタグによくある間違いです。 ×分割したページは1ページ目にカノニカルを向ける             ↓ ○view allページまたはrel=“next”とrel=“prev”を使う 実は1ページ目にカノニカルを集めるのは推奨されておりません。 そういった場… Read More
  • 301リダイレクトとは301リダイレクトとは こんにちは山田です。 写真は明るければきれいに見えるなと思う今日この頃です。 うまく話をつなげられないので悔しい限りですが本題に入ります。 ■そもそもリダイレクトとは 指定したWebページから、自動的にほかのWebページに転送される機能です。 おもにURLが変わった… Read More
  • cssやjsファイルを確実に更新させるこんにちは山田です。 身内ルールと思っていたものが実は広く一般的なやりかただったこと というものに遭遇しました。 今日はそのお話しです。 開発環境:ASP.NET 2.0 CSSファイルに修正を加えて、よし動いたと思っていたら、 依頼者から「変わってないんだけど~」の声 ブラウザを更新してみると… Read More
  • Google Maps API を使用するこんにちわ、開発者のⅠです。 起床するたびに部屋の寒さに震えている今日この頃です。 皆さんはいかがでしょうか。 さて、今回のお題は”グーグルAPI”についてです。 そもそもAPIとはなんでしょうか? ”Application Programming Interface ”の頭文字をとった言葉であ… Read More
  • canonicalとは?こんにちわ山田です。 一段と肌寒くなってきましたね。 衣替えをして、冬に備えたいと思います。 さて、本日ですが、 canonicalタグについて調べてみました。 ■canonicalとは? 一言でまとめると。異なるURLを一つのものとして認識させるタグ。URLの正規化の設定です。 もし、この… Read More

0 コメント:

コメントを投稿