1. ホーム
  2. c++

[解決済み] if文 - 短絡的な評価と可読性の比較

2023-03-18 15:39:30

質問

時々 if 文はかなり複雑で長いので、可読性を高めるために、複雑な呼び出しを if .

例:これ

if (SomeComplicatedFunctionCall() || OtherComplicatedFunctionCall())
{
    // do stuff
}

をこのように

bool b1 = SomeComplicatedFunctionCall();
bool b2 = OtherComplicatedFunctionCall();

if (b1 || b2)
{
    //do stuff
}

(提供された例は その が悪いわけではなく、単に説明のためのものです。複数の引数を持つ他の呼び出しを想像してみてください。)

しかし、この抽出で私は短絡評価 (SCE) を失いました。

  1. 本当に毎回 SCE が失われるのでしょうか。コンパイラーが "最適化"して、まだ SCE を提供できるようなシナリオはあるのでしょうか?
  2. SCE を失うことなく、2 番目のスニペットの改善された可読性を維持する方法はありますか?

どのように解決するのですか?

自然な解決方法として、次のようなものがあります。

bool b1 = SomeCondition();
bool b2 = b1 || SomeOtherCondition();
bool b3 = b2 || SomeThirdCondition();
// any other condition
bool bn = bn_1 || SomeFinalCondition();

if (bn)
{
  // do stuff
}

これは、理解しやすい、あらゆるケースに適用できる、短絡的な動作をするなどの利点があります。


これは私の最初の解決策でした。 メソッド呼び出しとforループ本体の良いパターンは以下の通りです。

if (!SomeComplicatedFunctionCall())
   return; // or continue

if (!SomeOtherComplicatedFunctionCall())
   return; // or continue

// do stuff

短絡的な回路評価による素晴らしいパフォーマンス上の利点はそのままに、より読みやすいコードになります。