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の形のみで表現しています。