3

次のシナリオ (C++) には疑問があります。

たとえば、if 条件があるとします。

if ( a ? b ? c : d : false)
{
    // do something
}
else
{
    // do something else
}

これがどのように機能するかについての私の解釈です:

If a is true, it checks b. Then,
    - If b is true, the if loop is reduced to if (c)
    - If b is false, the if loop is reduced to if (d)
If a is false, the if loop is reduced to if (false)

私の理解は正しいですか?
これを使用する方が良いですか、それとも複数のif/elseチェックを使用しますか?

4

5 に答える 5

5

あなたの質問は2つの部分に分かれています.1つはステートメントの動作について、次にこれを行うべきかどうかについてです。何人のプログラマーが 2 番目の問題を解くかをお見せしましょう。

土曜日の朝の午前 4 時 30 分に二日酔いで、このコードにバグがあり、30 分以内に修正する必要があるとします。そうしないと、仕事やビジネスが危険にさらされます。

if (a ? b ? c : d : false)

また

if (a) {
    if (b)
        return c;
    else
        return d;
} else {
    return false;
}

また

if (!a)
    return false;
if (!b)
    return d;
return c;

また

if (a)
    return b ? c : d;
else
    return false;

どちらが正しい選択でしたか?

- 編集 -

1 文字の変数名では、無害に見えます。したがって、いくつかの実際の変数名:

if (application.config.usingUTCTimezone ? system.environment.biosTimezoneIsUTC ? haveNTPServerConfigured : system.time.clockIsSynchronized : false)

また

if (application.config.usingUTCTimezone ?
    system.environment.biosTimezoneIsUTC ?
        haveNTPServerConfigured : system.time.clockIsSynchronized
    : false)

また

if (application.config.usingUTCTimezone) {
    if (system.environment.biosTimezoneIsUTC)
        return haveNTPServerConfigured;
    else
        return system.time.clockIsSynchronized;
} else {
    return false;
}

また

if (!application.config.usingUTCTimezone)
    return false;
if (!system.environment.biosTimezoneIsUTC)
    return system.time.clockIsSynchronized;
return haveNTPServerConfigured;

また

if (application.config.usingUTCTimezone)
    return system.environment.biosTimezoneIsUTC ? haveNTPServerConfigured : system.time.clockIsSynchronized;
else
    return false;
于 2013-09-26T05:53:59.197 に答える
0

動作しますが、このような入れ子の三項演算子はほとんど読み取り可能ではありません。

として書く

if ( a && (( b && c ) || d )) {
  // do something
} else {
  // do something else
}

私見ですが、はるかに読みやすく、元のコードよりもそれほど長くはありません。

于 2013-09-26T05:52:39.927 に答える