LoginSignup
2
1

More than 1 year has passed since last update.

論理演算子(&&と||)と短絡評価

Posted at

はじめに

論理演算子で「ムムム!」と思うことがあったので、自分の再確認としてのメモです。
知っている人にとっては、当たり前でしょと思う内容だと思います。

短絡評価

論理演算子(&&,||)では最初の結果だけを評価して、残りは評価しないことがある。

.java
1. true  && true    true
2. true  && false   false
3. false && true    false
4. false && false   false

3と4では、左側がFalseなので、右側の評価は何であれ、Falseとなる。
||も同じことが言える。

.java
1. true  || true   true
2. true  || false  true
3. false || true   true
4. false || false  false

1と2では、左側がTrueなので、右側の評価は何であれ、Trueとなる。

このように左側の評価だけで、全体の評価が決まる時、右側の評価を見ないことを短絡評価と言う。

演算子が複数種類ある場合の評価

先ほどは、&&だけ、||だけと分けて考えたが、&&と||が両方ある時の評価はどうなるだろうか?

.java
0. A     && B     || C
1. false && true  || true   true
2. true  && false || true   true
3. false && false || true   true
4. true  && true  || true   true
5. false && true  || false  false
6. true  && false || false  false
7. true  && true  || false  true
8. false && false || false  false

4と7のように、A && BがTrueであれば、Cの評価が何であれ、全体の評価はTrueになる。
A && BがFalseであれば、Cの評価によって全体の評価が決まる。

冷静に考えれば当然のことだが、私はAの評価だけを見て、全体の評価が決まると勘違いしていた。

.java
0. A     && B     || C
1. false || true  && true   true
2. true  || false && true   true
3. false || false && true   false
4. true  || true  && true   true
5. false || true  && false  false
6. true  || false && false  true
7. true  || true  && false  true
8. false || false && false  false

先程の例の&&||を入れ替えてみた。
結果が異なるのは、3と6である。
ご存じではあると思うが、||より&&の方が評価する優先順位が高い。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1