邏輯判斷與流程控制


不知道各位有沒有看過這則笑話,你看完今天的內容應該就可以了解這個笑點在哪裡了!

這部分是各家程式語言最常使用也是訓練大家邏輯思考的地方了,許多的運算或是流程進行就必須先懂這部分的操作,今天就讓我們來好好認識 Ruby 的寫法吧!

等號的數量跟判斷有甚麼關係?

  • “=” 1 個等號是指定
  • “==” 2 個表示比對,會得到 true or false
  • “>=” 大於等於
  • “<=” 小於等於
  • “!=” 驚嘆號出現就是否定,不等於

其實 Ruby 的等號很多時候不是等號!!
Ruby 裡面只有 nil 跟 false 是假的,其他都是真

If 條件判斷 (如果…不然就)

if 是我們條件的設定,後面可以透過 elsif 添加額外得條件,或是 else 直接設定前面的條件之外的條件都算

  • 注意: ruby 比較特別的是 elsif 不用寫”e”(英文應為 else if)。
  • 注意:if 條件最後面需要加上 end 來表示這個邏輯判斷 block 的結束喔,後續的章節還會特別提到 block,可以先想像成這個區域內,裡面應用到的變數出去後就不能用了喔!

If

單一條件,且符合條件才會執行內容

1
2
3
if weather == "sunny"
puts "好天氣喔!" #判斷等於'sunny"就印出
end

if … else

二分法的方式

1
2
3
4
5
if weather == "sunny"
puts "好天氣喔!" #判斷等於'sunny"就印出
else
puts "壞天氣啦!" #其他條件都印這個
end

if…elsif…else (中間的 elsif 可以無限增加,剩餘的條件用 else)

超過三種條件以上可以使用這種類型判斷

1
2
3
4
5
6
7
8
9
10
11
age = 10

if age >= 0 && age<=3
puts "嬰兒" # 年齡>=0 且<=3 就印
elsif age >= 4 && age <= 10
puts "兒童" # 年齡>=4 且<=10 就印
elsif age >= 11 && age<=17
puts "青少年" # 年齡>=11 且<=17 就印
else
puts "成年" #上述以外的條件都印這個
end

容易搞混的邪惡分身們 evil twins

  • unless = if not
  • If = unless not
    非英文母語的可能會覺得不直觀,所以使用哪種必須考慮程式碼可讀性!!
1
2
3
unless age >=18
puts "未成年" #如果年齡沒有大於等於18 才印出
end

三元運算子

有些時候會這樣去撰寫,看似精簡,但可讀性比較差。

1
2
3
4
5
6
7
if age >=18
status = "成年"
else
status = "未成年"
end
#等同這樣的三元運算,用?前來表示if的條件,:前面則表示if的執行結果,後面表示else的執行結果
status = (age>=18)? "成年":"未成年"

case when

利用這樣可以清楚地列出相關的條件,但其實這些都是 ruby 使用語法糖衣包裝過的 if..else

Ruby 的 Case when 可以用範圍的魔法喔!!

1
2
3
4
5
6
7
8
9
10
11
12
age = 20

case age
when 0..3
puts "嬰兒"
when 4..10
puts "兒童"
when 11..17
puts "青少年"
else
puts "成年"
end

常見錯誤,一個等號不是等於的判斷

很多新手會以為單個 “=” 可以進行條件判斷,但這樣其實是代表指定
可以看到下面的範例:

1
2
3
4
5
6
7
score = 95

if age = 100
puts "滿分"
else
puts "未滿分"
end

原本我們預期可以看到 95 分進去條件判斷應該是要印出未滿分,但最後卻印出滿分。是因為 if 那邊應該使用”==”,不然會將 score 指定成 100,然後在 ruby 世界中指定這件事情回傳直就是內容本身,所以判斷後得到 true 就回傳”滿分”了。

以上就是基本的條件判斷在 Ruby 裡面的用法,要好好弄清楚,不管是在任何程式語言中都是相當重要的一環呢!


參考資料:

  1. 為你自己學 Ruby on rails
  2. Rails 實戰聖經