iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 6
1

想到什麼就寫什麼~依序就來篇迴圈與迭代吧!

迴圈(loops)

如果你問什麼是迴圈?解釋大概就是說,在一段程式中利用了短短幾行程式碼,但卻能夠連續執行多次重複動作。執行次數會依照程式碼設立的條件成立時才結束迴圈,或者是針對集合中的所有項目統一處理。而迴圈是程式設計佔有非常重要的部份。

依序介紹以下迴圈:

  • while迴圈, until迴圈
  • Loop迴圈
  • for..in迴圈
  • times, upto, downto 方法
  • 迭代iteration

while迴圈, until迴圈

while和until皆是需要設定條件的迴圈,如果沒有條件設定,或是設定不當的話,不小心會變成「無限迴圈」。

while迴圈

counter = 1
while counter < 5
    counter += 1
    puts counter
end

  # 輸出結果:
  # 2
  # 3
  # 4
  # 5

until迴圈

counter = 1
until counter > 5 
  counter += 1
  puts counter 
end

  # 輸出結果:
  # 1
  # 2
  # 3
  # 4
  # 5

loop迴圈

它不像while或until迴圈事先宣告停止條件,它會重複執行loop的內容,直到迴圈break if條件設定才會停止,如果忘記加上break會變成「無限迴圈」。

a = 5
loop do
  a -= 1
  puts "#{a}"
  break if a <= 0
end

  # 輸出結果:
  # 0
  # 1
  # 2
  # 3
  # 4

在下列迴圈中使用next if,意思是如果符合這個條件,就進入下一段繼續執行

a = 10
loop do
  a -= 1
  next if a % 2 == 1

  print "#{a}"
  break if a <= 0
end

for..in..迴圈

限制次數迴圈,但在Ruby迴圈不常使用,通常都是用each方法居多。

for i in 0..3
    puts "hey #{i}"
end

  # 輸出結果:
  # hey 1
  # hey 2
  # hey 3

----------------------------

students = ["Aimee", "Nina", "Sarah"]
for s in students
    puts s
end

 # 輸出結果:
 # Aimee
 # Nina
 # Sarah

times, upto, downto方法

times方法可以指定要跑幾次的迴圈,upto跟downto方法,則是可以正向或反向的執行迴圈。

times方法

3.times do
    puts "hi, apple"
end

  # 輸出結果:
  # hi, apple
  # hi, apple
  # hi, apple

upto方法

  1.upto(3) do |x|
    puts "hi, apple #{x}"
  end

  # 輸出結果:
  # hi, apple 1
  # hi, apple 2
  # hi, apple 3

downto方法

  3.downto(1) do |x|
    puts "hi, apple #{x}"
  end

  # 輸出結果:
  # hi, apple 3
  # hi, apple 2
  # hi, apple 1

迭代 iteration

each應該是最常使用的一種方法,通常在ruby處理陣列跟雜湊的時候都會用到。
上述說到在Ruby迴圈不常使用for迴圈,通常都是使用each方法,就拿for迴圈的例子來看,會發現得到相同得結果。

students = ["Aimee", "Nina", "Sarah"]
students.each do |s|
    puts s
end

 # 輸出結果:
 # Aimee
 # Nina
 # Sarah

如果Array換成Hash

hash = {girl: "doll", boy: "car"}
hash.each do |key, value|
  puts "gender: #{key}, toy: #{value}"
end

 # 輸出結果:
 # gender: girl, toy: doll
 # gender: boy, toy: car
 
----------------------------------- 
 
# 也可以單取key跟value

hash.each_key do |key|
  puts key
end

hash.each_value do |value|
  puts value
end

參考連結:
變數、常數、流程控制、迴圈
[Ruby] 迴圈及疊代(Loop and Iterator)


上一篇
Day05 | 變數與常數
下一篇
Day07 | 類別Class與模組Module比一比
系列文
從色彩繽紛到只看亂碼日子,學程式從 Ruby 出發!30

尚未有邦友留言

立即登入留言