程式扎記: [ Ruby Gossip ] Basic : 流程控制 - if 與 unless

標籤

2014年10月18日 星期六

[ Ruby Gossip ] Basic : 流程控制 - if 與 unless

Source From Here
Preface
要某條件成立時才進行某些動作,Ruby 提供了 if運算式,一個例子如下:
  1. filename = "default.properties"  
  2. if ARGV[0]  
  3.     filename = ARGV[0]  
  4. end  
  5. puts filename  
這 個範例中,預設的檔案名稱是 default.properties,如果使用者有提供命令列引數,則 ARGV[0] 就會有值,而不會是 nil,在 if 判斷中會被當作真,所以if條件成立,將 filename 設定為使用者所提供的命令列引數。

if 與 unless
if 可以搭配 else,在 if 條件不成立時,執行 else 中定義的程式碼,所以上例也可以這麼寫:
  1. if ARGV[0]  
  2.     filename = ARGV[0]  
  3. else  
  4.     filename = "default.properties"  
  5. end  
  6. puts filename  
如果有多重判斷,則可以使用 if..elsif..else 結構。例如:
  1. # encoding: Big5  
  2. print "輸入分數:"  
  3. score = gets.to_i  
  4. if score >= 90  
  5.     puts "得 A"  
  6. elsif score >= 80 and score < 90  
  7.     puts "得 B"  
  8. elsif score >= 70 and score < 80  
  9.     puts "得 C"  
  10. elsif score >= 60 and score < 70  
  11.     puts "得 D"  
  12. else  
  13.     puts "不及格"  
  14. end  
如果要在一行中撰寫 if 判斷,則 if 之後必須使用 then 或分號。例如:
  1. filename = "default.properties"  
  2. if ARGV[0] then filename = ARGV[0] end  
  3. puts filename  
Ruby 中程式碼需換行的地方,也可以使用分號,所以也可以這麼寫:
  1. filename = "default.properties"  
  2. if ARGV[0]; filename = ARGV[0] ;end  
  3. puts filename  
if 有個可傳回值的使用方式:
  1. filename = "default.properties"  
  2. filename = ARGV[0if ARGV[0]  
  3. print filename  
上例中,只有在 if 判斷成立時,filename 才會被設定為 ARGV[0]。

在 Ruby 中有 if,也有 unless。if 條件成立才會執行區塊內容,unless 則相反,條件不成立才會執行區塊,if 是如果條件成立就執行區塊,unless是除非條件成立,否則就執行區塊

一個例子如下:
  1. # encoding: Big5  
  2. print "輸入正數:"  
  3. number = gets.to_i  
  4. unless number >= 0  
  5.     number = -number  
  6. end  
  7. puts number  
這個例子中,使用者必須輸入 0 以上的正數,如果使用者輸入負數,要轉為正數,所以使用 unless,除非輸入的數大於等於 0,否則就使用-轉為正數。

unless 也可以搭配 else。例如:
  1. unless ARGV[0]  
  2.     filename = "default.properties"  
  3. else  
  4.     filename = ARGV[0]  
  5. end  
  6. puts filename  
除非使用者有提供命令列引數,否則 filename 就設定為 "default.properties",要不然 filename 就設定為使用者提供的命令列引數。如果要在一行中撰寫unless判斷,則unless之後同樣必須使用then或分號。例如:
  1. # encoding: Big5  
  2. print "輸入正數:"  
  3. number = gets.to_i  
  4. unless number >= 0 then number = -number end  
  5. puts number  
unless 也有個可傳回值的使用方式:
  1. filename = "default.properties"  
  2. filename = ARGV[0] unless !ARGV[0]  
  3. print filename  

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!