| と || の or 演算子の違いは何ですか? 質問する

| と || の or 演算子の違いは何ですか? 質問する

||私はC# と PHP の両方で、OR 式で常に (2 つのパイプ) を使用してきました。 時々、1 つのパイプが使用されているのを見ます: |。これら 2 つの使用法の違いは何ですか? どちらか一方を使用する際に注意すべき点はありますか、それとも互換性がありますか?

ベストアンサー1

&and演算子と同様に&&、double 演算子は「短絡」演算子です。

例えば:

if(condition1 || condition2 || condition3)

条件 1 が true の場合、条件 2 と 3 はチェックされません。

if(condition1 | condition2 | condition3)

これにより、条件 1 がすでに真であっても、条件 2 と 3 がチェックされます。条件は非常にコストのかかる関数になる可能性があるため、これらを使用することでパフォーマンスを大幅に向上できます。

大きな注意点が 1 つあります。NullReferences または類似の問題です。例:

if(class != null && class.someVar < 20)

クラスが null の場合、if ステートメントは がclass != nullfalse になった後に停止します。& のみを使用すると、チェックが試行されclass.someVar、適切な が得られますNullReferenceException。Or 演算子を使用すると、何か悪いことがトリガーされる可能性は低いため、それほど大きな罠にはならないかもしれませんが、覚えておく必要があります。

ただし、各条件が必ず実行される関数である設計でない限り、単一の&or演算子を使用する人はいません。設計上の臭いのように聞こえますが、時には (まれに) クリーンな方法であることもあります。演算子は「これら 3 つの関数を実行し、そのうちの 1 つが false を返した場合は else ブロックを実行します」が、 は「いずれも false を返さない場合にのみ else ブロックを実行します」 - 便利な場合もありますが、前述のように、多くの場合は設計上の臭いです。|&|

ただし、|and演算子の 2 番目の用途があります。&ビット演算

おすすめ記事