[Day05] 風向自西偏東,些許順風,風力4級。。。
海賊王的德雷斯羅薩島篇,如果烏索普沒有擊敗砂糖,其後果是難以預料的,嚴重的話可能會導致全員戰敗,不過要如何順利擊中目標呢?必定要有一番縝密的計算吧?運算子(operator)就是其中不可或缺的概念,一起來了解 Ruby 裡的運算子吧!
顧名思義,比較運算子(Comparison Operators)用於比較符號左右兩邊的東西,經常會被用在流程控制,許多比較運算子和我們在數學課上學到的都一樣:
a < b # 小於
a <= b # 小於等於
a > b # 大於
a >= b # 大於等於
==
前面有介紹過,一個等號 =
是指定變數的值,屬於賦值運算子(Assignment Operators)的一種,譬如:
a = 5
b = "5"
不過,兩個等號 ==
就是比較運算子的一種了,我們會用它比較兩個元素是否相等:
a = 5
b = "5"
a == b # 比較是否相等
=> false
a != b # 比較是否不相等
=> true
# 字串和數字當然不一樣!
至於三個等號 ===
,目前我還沒有很清楚,只知道可以用來呼叫 Proc,與 ==
比較的東西也不太一樣,之後有好的例子會再介紹它!
邏輯運算子(Logical Operators)常見的有 &&
、 ||
、 !
效果等同於and
、or
、 not
,不過符號有較高的優先權(precedence),話不多說我們直接看 code:
a = 3
b = 2
a && b # a and b
a || b # a or b
!a # not a
&&
是用來確認一串條件判斷式之中是否有 false
或 nil
,只有全部為 true
,才會通過條件判斷。a || b
:a
和 b
其中一個成立即可,同時若 a
為 true
就不用判斷 b
;如果 a
是 false
才會判斷 b
!a
:不是 a
為了讓初學 Ruby 的朋友可以看懂下面的例子,在這邊我決定先偷跑一下,在 Ruby 裡的流程判斷會這樣寫:
if #假設一個條件 => 可能會得到 true 或 false
# 結果為 true 就執行這行
else #否則
# 結果為 false 執行這行
end
好的,我看在座的各位骨骼清奇,根骨極佳,應該都是百年難得一遇的練武奇才,想必就算看不懂我在寫什麼也能迅速了解概念,接著馬上來看看 &&
的實際例子:
&&
Ba = 0
b = 1
if (a == 1 && b % 2 == 1)
p "True!"
else
p "False!"
end
"False!"
由於 a == 1
就已經是 false
,所以 &&
那行的結果為 false
,因此會走另一條路,最終印出了 false
。
如果重新指定 a
和 b
的值,再執行一次判斷式的話:
a = 1
b = 3
if (a == 1 && b % 2 == 1)
p "True!"
else
p "False!"
end
"True!"
就會印出 "True"
了!
||=
B如果在 Ruby 裡看到某個變數後面寫 ||=
,就表示:當變數是 nil
或 false
時,就把這個變數指定為 =
後面的值。
直接看 code 可能更清楚:
當 a
有值的情況:
a = 1
a ||= 2
a
=> 1
當 a
是 false
的情況:
a = false
a ||= 2
a
=> 2
另外還有一些比較特殊的:算術運算子(Arithmetic Operators),像是 +
、-
、*
、%
這些常見的算術符號,在 Ruby 裡,他們同時也是方法(method)的一種!
4 + 2 => 6 # 加法
4 - 2 => 2 # 減法
4 * 2 => 8 # 乘法
4 / 2 => 2 # 除法
4 % 2 => 0 # 得出餘數
4 ** 2 => 16 # 得平方數
在 Ruby 裡如果要呼叫方法,會寫:
物件
+ .
+ 某個方法
所以上面那幾行實際上長這樣:
4.+(2)
4.-(2)
4.*(2)
4./(2)
4.%(2)
4.**(2)
可以看到這些算術符號其實都是被 4
所呼叫的方法,而 2
則是帶入的參數,Ruby 的方法還有其他更神奇的地方!過幾天會跟大家介紹!
另外關於 Ruby 的物件,後面也會有獨立一篇詳細介紹(一直在挖坑)
要特別注意的是,在使用上如果是較複雜的情況時,不同的運算子之間會有優先權大小的差異,優先權的順序建議直接查閱文件,以免得到錯誤的結果。
參考資料: Ruby Operators
見聞色霸氣是不是覺醒了呢?
如果還沒的話,下篇會繼續說明流程控制的內容,明天見!