天天看點

Ruby入門(2)——基本流程控制

(一)條件判斷

條件判斷為基本式:

if expression

       code

end

表達式如果不是false或nil,則可執行code部分,是以對于else來說,如果為false或nil,則else下的代碼是要執行的。要注意的是表達式與執行代碼之間要有分界符:例如換行或分号或是then關鍵字。

多條件分支情況下,除了可以用else if之外,可以用省略式:elsif

if expression1

       code1

elsif expression2

       code2

else

       code3

如果通過then做為分界符:

if expression then code end,那麼可以把if直接做為分界符:code if expression,這時,if稱為表達式修飾符。先寫執行再寫執行條件。要注意的是:如果成為表達式修飾符,則執行代碼與if之間不能帶換行符。雖然這種方式也是一種條件句,但我覺得它更像一種修飾。

對于if判斷來說,它可以傳回執行代碼後的值。

與if條件類似,還有unless判斷,它和if相反。

在C#中,多分支語句有個switch case開關,在ruby中,則是case when。case when非常靈活。

(二)循環

循環條件是while do或until do,而位于它們之間的是循環體。

現條件if相似,循環語句也可以用分界符的形式做緊湊循環,這時,省略了換行符和end。

x=1 

puts x,x+=1 while x<10 

while x<20 do 

  puts x 

  x+=1 

end 

在C#中有for循環應用非常廣泛,在ruby中,for循環與foreach的作用類似,用于對可枚舉對象進行疊代。

for var in collection do

其中collection是帶有each疊代方法的對象;do關鍵字可選(可以用換行符或分号替代)。

arr=%w[1 2 3 4 5 6] 

for item in arr 

  print item<<" " 

hash1={:a=>1,:b=>2,:c=>3} 

for key,value in hash1 

  print "#{key}=#{value}"<<" " 

(三)疊代器和枚舉

除了循環控制while、for、until外,有種特殊的方法用于循環,也就是疊代器,它是ruby最重要的特性之一。

(1)數值疊代器

upto:為一個區間内的所有整數調用其關聯的代碼塊。左邊為起始,右邊為結束。

downto:與upto相反。

times:調用關系的代碼一定的次數,且把0到n-1傳遞給代碼。

step:以一定的步長,疊代增加到指定數值。第二個參數為步長。

1.upto(5){|x|print "#{x} "} 

puts 

5.downto(1){|x|print "#{x} "} 

3.times{|x|print "#{x} "} 

3.step(5,0.5){|x|print "#{x} "} 

(2)枚舉疊代器

each:将疊代元素傳遞給代碼。

collect:為調用它的枚舉的每個元素執行關聯代碼後,組合到一起做為一個數組傳回。

select:為調用它的枚舉的每個元素執行關聯代碼後,如果為真,組合到一起做為一個數組傳回。

reject:與select相反。它把為false或nil的元素做為一個資料傳回。

inject:求累積值疊代。通過兩個參數調用關聯代碼塊,第一個參數是前次調用代碼塊的累積值,第二個參數指調用進行疊代的下一個元素。如果有傳遞參數,則做為第一個參數的初始值,如果沒有,則把第一次進行疊代的元素值做為初始值。

a1=[1,2,3] 

a2=a1.map{|x| x+1} 

a3=a2.collect{|x| x+1} 

print a2,a3 

#o偶數 

a5=a1.select{|x|x%2==0} 

print a5 

a6=a1.reject{|x|x%2==0} 

print a6 

a7=a1.inject{|sum,x|x+sum} 

puts a7 

a8=a1.inject(10){|sum,x|x+sum} 

puts a8 

部落格園大道至簡

<a href="http://www.cnblogs.com/jams742003/" target="_blank">http://www.cnblogs.com/jams742003/</a>

轉載請注明:部落格園