2013-03-21 6 views
5

これは非常に小さな問題です。 a()、b()、c()、d()の4つのブール関数があります。最初の人がtrueを返すまで、私はそれらを順番に呼びたいと思います。代わりに、伝統的な連鎖したifsを短絡した操作に置き換える

if(!a()) { 
    if(!b()) { 
     if(!c()) { 
      d(); 
     } 
    } 
} 

または

if(!a() && !b() && !c()) d(); 

をやって、私は短絡評価として式を書くことについて考えました。

(a() || b() || c() || d()); 

しかし、このテストはC/C++コードでこのように行われたことはありません。このアプローチに問題がありますか?

ありがとうございました。

+0

私は* 5 *ブール関数を見ることができます。 –

+3

@chris意味を変更しません.d()は、他のすべての関数がfalseの場合にのみ実行されます。 – Loghorn

+3

私はメンテナンスの観点からこれに対して助言したいと思います。短絡したバージョンが表示されたときにコードが何をするのかがすぐには分かりません(それがあなたにとって懸念事項である場合)。あなたがSOの行動について尋ねなければならないという事実は、他の人があなたのコードを読んでいるときに何が起こるかのヒントになるはずです。 – Michael

答えて

3

あなたが書いたコードは有効です。 d()は、他のブール関数がfalseを返す場合にのみ評価されます。

しかし、短絡した評価は読みにくく、メンテナンスの観点からエラーが発生する可能性があります。読者は理解しにくいかもしれません。

+0

エラーが発生しやすいのはなぜですか? – user666412

+3

あなたは間違っています。他の関数がtrueを返すと、 'd()'が評価されます。私が推測するところでは、可読性についてのあなたの主張があります。 –

+0

ベン。ありがとう。急いでいた。 – meyumer

2

これらは同等ですが、短絡した評価ソリューションは、特に関数名が長くてもパラメータを受け入れる場合には、読みにくい可能性があります。

関連する問題