1

if/then/else と同じくらい効果的に、1 つのステートメントでブール値を切り替えることはできますか?

私のアプリに入る別のコードでこれを見つけました...

    private void whatever()
    {
        ////
        //// a bunch of stuff
        ////

        if (SomeBooleanValue)
        {
            SomeBooleanValue= false;
        }
        else
        {
            SomeBooleanValue = true;
        }
    }

好奇心から、私はこれを試しました...

    private void whatever_whatever()
    {
        //// 
        //// the same stuff
        //// 

        SomeBooleanValue = !SomeBooleanValue;
    }

...そしてデバッグでそれを調べたところ、同じ結果が得られたようです

単一行の方法の代わりに if/then/else を使用する正当な理由はありますか?

4

5 に答える 5

4

単一行の方法の代わりに if/then/else を使用する正当な理由はありますか

私が考えることができるものはありません。オペレーターを使用する!と、ほとんどのプログラマーにとってよりクリーンで直感的になります。

于 2013-01-14T22:34:12.483 に答える
3

1行の方法はまったく問題ありません。構造体を使用する唯一の理由if/ elseは、ブール値の切り替え以外に他のことをしている場合です。

于 2013-01-14T22:35:04.640 に答える
2

コンパイラの最適化により、!を使用した場合と同じになります。他のプログラマーにとって読みやすい演算子。

でも、

パフォーマンスを向上させるために、CPUは事前に実行ロジックを予測しようとします。条件付き(if / else)ステートメントの場合、条件の結果を予測してから、残りのロジックをロードしようとします。選択が間違っている場合は、戻ってすべてを再計算する必要があるため、パフォーマンスが低下します。

http://en.wikipedia.org/wiki/Branch_predictor

于 2013-01-14T22:39:04.123 に答える
2

2番目の方が読みやすくコンパクトなので(if/then/else IMOが不要なコード行を追加するだけです)、2番目の方が優れていると思います.

于 2013-01-14T22:33:47.510 に答える
1

どうぞ、どうぞ、コードを否定として書いてください。これは、最も簡潔で簡潔な意図の表現です。最初の方法でコードを記述した場合、コードのすべての読者は、なぜ単純な否定を記述しなかったのか疑問に思って時間を浪費することになります。

ほとんどのコードは、書かれた回数よりもはるかに多くの回数、あなたや他の人によって読み取られます。読み取りプロセスを容易にするコードを作成することは、ほぼ定義上、優れたコードです。

于 2013-05-31T01:22:18.033 に答える