Logical Operators
1. &&
, and
只有兩個值皆為 true,才成立。
Ex: true && true => true
, false && true => false
2. ||
, or
只要有一個值為 true,就成立並回傳該值。
Ex: false || true => true
, true || false => true
3. !
, not
就是個唱反調的,如果該值為 Truthy,則回傳 false,反之亦然。
Ex: !true => false
, !nil => true
Truthy and Fasley value
接續上一篇 Ruby 中的 Truthy, Falsey value,試著回答看看以下的 code 執行會回傳什麼?
str = ""
str || str.length
首先假定我們已經都知道邏輯運算子的用法,且對上一篇還有印象。
Ruby 會是這樣判斷的:
str
空字串是 Truthy value||
一者為 true,- 既然
str
已為 true - 便直接回傳
str
,也就是""
str = ""
str && str.length
- 前面一樣為 Truthy value
&&
二者須為 truestr
true,str.length
true => 成立- 空字串長度為 0
參考 [這篇][“truthy” and “falsey” (or “falsy”) in Ruby] 的方法,建議進入 irb, 帶入參數自己玩看看,印象會更深刻。
def and_op(a, b)
a && b
end
def or_op(a, b)
a || b
end
def not_op(a)
!a
end
甚至讓回傳的結果更完整可以嘗試看看:
1. &&
, and
def print_and_op(a, b)
return_value = and_op(a, b)
if return_value
puts "#{a.inspect} && #{b.inspect} => #{return_value.inspect}, is truthy"
else
puts "#{a.inspect} && #{b.inspect} => #{return_value.inspect}, is falsey"
end
end
print_and_op(nil, true)
=> ?
2. ||
, or
def print_or_op(a, b)
return_value = or_op(a, b)
if return_value
puts "#{a.inspect} || #{b.inspect} => #{return_value.inspect}, truthy"
else
puts "#{a.inspect} || #{b.inspect} => #{return_value.inspect}, falsey"
end
end
print_or_op(false, true)
=> ?
3. !
, not
def print_not_op(a)
return_value = not_op(a)
if return_value
puts "!#{a.inspect} => #{return_value.inspect}, truthy"
else
puts "!#{a.inspect} => #{return_value.inspect}, falsey"
end
end
print_not_op(0)
=> ?
這是基本中的基本,花一點時間加深印象絕對值得。至少不必像我一樣在面試時回答的支支唔唔,一方面心裡也心虛…共勉之。