✨
if/unless と論理演算子チートシート
まとめ
if a && b | if a || b | unless a && b | unless a || b | |
---|---|---|---|---|
[true, true] | 成立 | 成立(短絡) | 不成立 | 不成立(短絡) |
[true, false] | 不成立 | 成立(短絡) | 成立 | 不成立(短絡) |
[false, true] | 不成立(短絡) | 成立 | 成立(短絡) | 不成立 |
[false, false] | 不成立(短絡) | 不成立 | 成立(短絡) | 成立 |
- 「成立」のとき if/unless のブロックに入る
動機と考察
-
unless a || b
としたとき、片方false
だったら成立(ブロックに入る)のかがぱっと見でわからず混乱したので、この際全パターン見ようと思った - if/unless 式の演算結果が
true
かfalse
かをみているだけ - 短絡評価されるかどうかは boolean と論理演算子(
&&
,||
)の関係だけで決まる
動作確認したコード
def side_effect(b)
p "#{b}_side_effect"
b
end
dat = [[true, true],[true, false],[false, true],[false, false],]
for d in dat do
p d
if side_effect(d[0]) && side_effect(d[1])
p "if and"
end
p "-"
if side_effect(d[0]) || side_effect(d[1])
p "if or"
end
p "-"
unless side_effect(d[0]) && side_effect(d[1])
p "unless and"
end
p "-"
unless side_effect(d[0]) || side_effect(d[1])
p "unless or"
end
end
Discussion