在日常生活中,我們常講如果...就...不然就...
舉例來說:
如果今天出太陽我就出門,不然就待在家。
這是我們平常就會說的話,那換成程式要怎麼說呢?
接下來,一起來認識在 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 ) # 或
如果...就
這個只有一個條件,寫起來是這樣:
weather = "下雨"
if weather == "下雨"
puts "出門帶傘"
end
因為今天下雨,所以會印出帶傘出門。
如果...就...不然就...
這是一個簡單的二分法,寫起來像這樣:
weather = "下雨"
if weather == "出太陽"
puts "出門"
else
puts "待在家"
end
因為今天下雨,所以會印出待在家。
如果...或如果...不然就...
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 #印出 未成年
三元運算子看似程式碼減少了好幾行,但對有些人的可讀可能就會將低。
剛開始學習時,建議先使用一般的寫法,等熟練了再來嘗試三元運算子。
如果當遇到很多的如果...就怎樣...
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 # 真的
這邊有一個地方是新手階段很容易犯的錯
看看下面這段程式碼範例:
age = 20
if age = 18
puts "yes"
else
puts "no"
end
看起來一切都很合理,理論上也會印出 no ,但是當初執行程式碼之後,你會發現它一直印出 yes。
這是為什麼?
因為一個等號表示是指定(assign),二到三個等號才是比較(compare)。
所以上面的例子,age = 18 是表示把數字 18 指定給 age 這個變數,而指定的回傳值就是指定內容本身,所以這個判斷式就會得到 true,所以不管你傳的是 18 或 20 ,都會是得到 yes 。
參考資料: