iT邦幫忙

2022 iThome 鐵人賽

DAY 12
0
Modern Web

Ruby新手村的礦工日記系列 第 12

[ Day 12] Ruby 流程控制

  • 分享至 

  • xImage
  •  

在日常生活中,我們常講如果...就...不然就...
舉例來說:
如果今天出太陽我就出門,不然就待在家。
這是我們平常就會說的話,那換成程式要怎麼說呢?
接下來,一起來認識在 Ruby 要怎麼寫吧!

比較方法

在正式進入流程控制前,有一些東西你必須先知道

puts 1 > 2 # 大於
puts 1 < 2 # 小於
puts 5 >= 5 # 大於等於
puts 5 <= 4 # 小於等於
puts 1 == 1 # 等於
puts 2 != 1 # 不等於

puts ( 2 > 1 ) && ( 2 > 3 ) # 和
puts ( 2 > 1 ) || ( 2 > 3 ) # 或

if

如果...就
這個只有一個條件,寫起來是這樣:

weather = "下雨"

if weather == "下雨"
  puts "出門帶傘"
end

因為今天下雨,所以會印出帶傘出門

if...else...

如果...就...不然就...
這是一個簡單的二分法,寫起來像這樣:

weather = "下雨"

if weather == "出太陽"
  puts "出門"
else
  puts "待在家"
end

因為今天下雨,所以會印出待在家

if...elsif...else

如果...或如果...不然就...

weather = "陰天"

if weather == "出太陽"
  puts "出門"
elsif weather == "陰天"
  puts "待在家"
else
  puts "睡覺"
end

因為今天是陰天,所以會印出待在家

三元運算子

三元運算子可以幫我們處理簡單的if else,像是這樣:
一般:

age = 25

if age >= 18
  status = "已成年"
else 
  status = "未成年"
end

puts status #印出 已成年

改成三元運算子:

age = 15

status = (age >= 18)? "已成年":"未成年"

puts status #印出 未成年

三元運算子看似程式碼減少了好幾行,但對有些人的可讀可能就會將低。
剛開始學習時,建議先使用一般的寫法,等熟練了再來嘗試三元運算子。

case when

如果當遇到很多的如果...就怎樣...

age = 10 

if age >= 0 && age <= 3
  puts "嬰兒"
elsif age >= 4 && age <= 10
  puts "兒童"
elsif age >= 11 && age <= 17
  puts "青少年"
else
  puts "成年"
end

為了讓程式碼看起來簡潔,可以這樣寫:

age = 10

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

但這樣好像不夠精簡

age = 10

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

這樣是不是更精簡且好懂了呢!

什麼?!竟然有倒裝句

一個判斷式中,如果只有一行

age = 20

if age >= 18
  puts "已成年"
end

我們可以把 if 搬到後面

age = 20

puts "已成年" if age >= 18

真真假假

在 Ruby 的世界中,因為所有的東西都是物件,但只有 nil 跟 false 是假的(false),其他的東西都會是真的(true),甚至連-1, [], 0 都是真的。
以下做個小實驗:

puts "真的" if nil
puts "真的" if false

puts "真的" if -1  # 真的
puts "真的" if []  # 真的
puts "真的" if 0   # 真的

watch out

這邊有一個地方是新手階段很容易犯的錯
看看下面這段程式碼範例:

age = 20

if age = 18
  puts "yes"
else
  puts "no"
end

看起來一切都很合理,理論上也會印出 no ,但是當初執行程式碼之後,你會發現它一直印出 yes。
這是為什麼?
因為一個等號表示是指定(assign),二到三個等號才是比較(compare)。
所以上面的例子,age = 18 是表示把數字 18 指定給 age 這個變數,而指定的回傳值就是指定內容本身,所以這個判斷式就會得到 true,所以不管你傳的是 18 或 20 ,都會是得到 yes 。

參考資料:

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

上一篇
[ Day 11 ] Ruby 使用一些方法吧
下一篇
[ Day 13 ] Ruby 今天我想來點迴圈跟迭代
系列文
Ruby新手村的礦工日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言