iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 5
0
自我挑戰組

滿滿的紅寶石不拿嗎?-- 去吧!我把世界上的一切都放在那裡了! 系列 第 5

運算子 <> 彈無虛發!一起和 GOD烏索普覺醒見聞色霸氣吧!- 滿滿的紅寶石不拿嗎?

https://ithelp.ithome.com.tw/upload/images/20200913/20128363EEgeX1wliz.jpg

[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)常見的有 &&||! 效果等同於andor not,不過符號有較高的優先權(precedence),話不多說我們直接看 code:

a = 3
b = 2

a && b        # a and b
a || b        # a or b
!a            # not a
  • && 是用來確認一串條件判斷式之中是否有 falsenil ,只有全部為 true,才會通過條件判斷。
  • a || bab 其中一個成立即可,同時若 atrue 就不用判斷 b;如果 afalse 才會判斷 b
  • !a:不是 a

為了讓初學 Ruby 的朋友可以看懂下面的例子,在這邊我決定先偷跑一下,在 Ruby 裡的流程判斷會這樣寫:

if #假設一個條件 => 可能會得到 true 或 false
  # 結果為 true 就執行這行 
else #否則
  # 結果為 false 執行這行
end

好的,我看在座的各位骨骼清奇,根骨極佳,應該都是百年難得一遇的練武奇才,想必就算看不懂我在寫什麼也能迅速了解概念,接著馬上來看看 && 的實際例子:

A && B

a = 0
b = 1

if (a == 1 && b % 2 == 1)
  p "True!"  
else
  p "False!"
end

"False!"

由於 a == 1 就已經是 false,所以 && 那行的結果為 false,因此會走另一條路,最終印出了 false

如果重新指定 ab 的值,再執行一次判斷式的話:

a = 1
b = 3

if (a == 1 && b % 2 == 1)
  p "True!"  
else
  p "False!"
end

"True!"

就會印出 "True" 了!


A ||= B

如果在 Ruby 裡看到某個變數後面寫 ||= ,就表示:當變數是 nilfalse 時,就把這個變數指定為 = 後面的值。

直接看 code 可能更清楚:

a 有值的情況:

a = 1
a ||= 2  

a
=> 1

afalse的情況:

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


見聞色霸氣是不是覺醒了呢?
如果還沒的話,下篇會繼續說明流程控制的內容,明天見!


上一篇
變數 <> 波瀾詭譎的程式之海總是充滿變數 - 滿滿的紅寶石不拿嗎?
下一篇
流程控制 <> 只要有風和海,我就有辦法航行!- 滿滿的紅寶石不拿嗎?
系列文
滿滿的紅寶石不拿嗎?-- 去吧!我把世界上的一切都放在那裡了! 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言