LoginSignup
1
1

More than 3 years have passed since last update.

条件分岐におけるand,orの動き

Posted at

and, orとは

・and

0 1
0 false false
1 false true

・or

0 1
0 false true
1 true true

andは対象全てが1であればtrueを返す。
逆に言えば1つでも0があればfalseを返す。

orは対象に0があっても1が1つでもあればtureを返せる。
簡単に言うと1つでも1があればtrueを返す。

ifで扱う&&と||

上記の例をプログラムで扱うとこうなる。
分かると思いますが&&, ||いずれも左から見ます。

func hoge() {
    let a = false
    let b = false
    let c = true

    // andは両方trueで初めてtrueを返せる
    // しかしaがfalseなため、どう頑張ってもtrueは返せない。
    if a && b {
        print("ここは入らない")
    } else {
        print("つまりbは見ないでここに到着!")
    }

    // 次はcがtrueなため、trueを返す希望がある。
    if c && a {
        print("ここは入らない")
    } else {
        print("今度は右辺のaを見てここに到着!(結局falseで終わってしまったが。。)")
    }

    // orは1でもtrueがあればtrueを返す。
    // cがtrueなため、どう頑張ってもtrueしか返せない
    if c || a {
        print("つまりaは見ないでここに到着!")
    }

    // 次aがfalseなため、cを見に行く必要がある。
    if a || c {
        print("cをみてtrueだったからここに到着!")
    }
}

これをみんな大好きnilと合わせると

func fuga() {
    let a = false
    let b = true
    let c: Bool? = nil

    // ①
    if a && c! {
    } else {
        print("printされる")
    }

    // ②    
    if b || c! {
        print("printされる")
    }

    // ③    
    if b && c! {
        print("クラッシュ")
    }

    // ④
    if a || c! {
        print("クラッシュ")
    }
}


解説 (clickでopen)
上から順に
①aがfalseなのでcを見に行かずfalseを返す
②bがtrueなのでcを見に行かずtrueを返す
③bがtrueなため、希望を持って右辺を参照、しかしnilなためクラッシュ
④aがfalseなため、trueを求めて右辺を参照、しかしnilなためクラッシュ

結局何が言いたいか

条件分岐におけるandとかorって条件に書いてある全てのものを見ている訳ではないよ!!
これだけ

まとめ

and: falseが見つかったら仕事放棄
or : trueが見つかったら仕事放棄

補足

厳密に言うと「and, orとは」で書いているように0,1で見ています。
Boolで返しますが、Boolで見ていません。

if文はわかりやすいように!(a&&b)のような書き方はしていません。
if,elseの形のみで表現しています。

1
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
1
1