本站電子書

您可以在這些電子書店找到本站電子書: Google Play 圖書iBooks StoreHyReadReadmooPubu
===>>>本站推出學習遊戲意見調查<<<===《如何自學程式設計》入選 Google Play 台灣地區2016年度最佳書籍

Ruby 入門指南 - 迴圈

程式 (program) 中的迴圈 (loop) 就是在特定程式區塊 (block) 中,重複執行相同的工作




Ruby 中有三種迴圈,分別是 while 迴圈 (while loop) 、 until 迴圈 (until loop) 、 for 迴圈 (for loop) 。我們先來看看 while 迴圈的寫法
i = 1 # 設定控制變數
while i < 11
    # 迴圈工作區
    puts i
    i += 1 # 調整控制變數值
end


這個迴圈所進行的工作很簡單,先在命令列上印出 1 ,然後一路遞增到 10 為止。迴圈有三個地方要注意
  • 設定控制變數
  • 條件
  • 調整控制變數值


while 迴圈的控制變數 (control variable) 必須在 while 之前就先設定好,此例中將控制變數 i 設定為 1 。然後進入 while 的地方,條件 (condition) 就在 while 之後,此例中為當控制變數 i 小於 11 時,迴圈便會重複執行。迴圈工作區,也就是 while 底下用縮排到 end 的程式區塊,這裡,我們只有簡單的印出控制變數 i 的值,迴圈工作區的最後需要有調整控制變數值的地方。


我們先寫成完整的範例,來執行看看結果吧!
puts
i = 1 # 設定控制變數
while i < 11
    # 迴圈工作區
    puts i
    i += 1 # 調整控制變數值
end
puts

=begin
《程式語言教學誌》的範例程式
http://pydoing.blogspot.com/
檔名:whiledemo.rb
功能:示範 Ruby 程式 
作者:張凱慶
時間:西元 2012 年 12 月
=end


執行結果如下



當我們明確知道重複次數的時候,我們得利用控制變數來記錄 while 迴圈所進行次數,這樣 while 迴圈才會有結束的一天,不然若是三個與控制變數相關的部份,漏了任一部份時,就有可能導致無窮迴圈 (infinite loop) 的發生,例如
i = 1 # 設定控制變數
while i < 11
    # 迴圈工作區
    puts i
end


這樣一來,控制變數 i 永遠小於 11 ,所以迴圈會一直重複執行,此例中會不斷的在命令列印出 1 ,直到強制結束程式的執行為止。


也可用 break 跳出迴圈, next 直接進行下一輪。


until 迴圈與 while 迴圈的差別在條件為假之時,才進行底下程式區塊的工作。


另外一個 for 迴圈用於取得具有多個元素的物件,例如範圍 (range)
for i in 1..10
    puts i
end


forin 連用, in 後面接多個元素的物件。這個 for 迴圈與上面的 while 迴圈功能完全相同,寫成完整的範例程式,如下
puts
for i in 1..10
    puts i
end
puts

=begin
《程式語言教學誌》的範例程式
http://pydoing.blogspot.com/
檔名:fordemo.rb
功能:示範 Ruby 程式 
作者:張凱慶
時間:西元 2012 年 12 月
=end


執行結果如下



while 迴圈與 for 迴圈各有各自的用途,可是迴圈還可以這樣寫
(1..10).to_a.each do |i|
    puts i
end


用小括弧圍起 1..10 的範圍,然後呼叫 to_a 方法將這個範圍轉換為陣列 (array) ,藉由陣列的 each 方法進行迴圈的工作,也就是用關鍵字 do 後面用 |i| 取得每個元素。


Ruby 允許程式有多種不同的寫法,這方面只要寫程式的人覺得好用、自然即可囉!


接下來我們繼續看到可以將程式模組化的重要的概念,也就是定義自己的方法


中英文術語對照
程式program
迴圈loop
程式區塊block
while 迴圈while loop
until 迴圈until loop
for 迴圈for loop
控制變數control variable
條件condition
無窮迴圈infinite loop
陣列array


您可以繼續參考
基礎篇


相關目錄
回 Ruby 入門指南
回 Ruby 教材
回首頁


參考資料
http://www.rubyist.net/~slagell/ruby/control.html
http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html
http://www.tutorialspoint.com/ruby/ruby_loops.htm

沒有留言: