Ruby 的迴圈跟迭代
Published in
Feb 12, 2021
開始學程式初期我最害怕的東西,迴圈跟迭代。
為什麼會害怕呢?其實也不是什麼了不起的原因,就是大家都說這個很難弄懂,所以我自然而然就潛意識覺得,這一定超難吧?
後來想想,沒有它們,同樣的事情現實中沒有迴圈我必須手動 N 遍,人生更難吧(?)
好加在 ruby 世界裡的迴圈,有了老爸寫的方法之後,一切變的非常直觀又很英文XD 降低了我對於它們的害怕!
現在就一起來看看有哪些迴圈跟迭代可以用吧!
迴圈?迭代?差在哪?
它們的相同意義非常簡單,就是:讓你不用重複做一樣的事 ,這也是程式語言的最高原則 Don’t Repeat Yourself ( DRY )。
那麼,迴圈跟迭代差在哪裡呢?
迴圈 ⇒ 跟電腦說:你就做五次吧
迭代 ⇒ 跟電腦說:你就把所有東西都看過一次吧
感覺不出來差在哪嗎?我覺得最大的差異就在於:
『 迭代你不用對電腦下終止的條件 ,全部看過一遍的話,看完自然就終止了』
那麼在 ruby 世界常用的迴圈有哪些?
for 迴圈 - 陣列的內容一個一個進去跑
names = ["mino", "amy", "john", "vicky"]
for name in names
puts name
end
while 迴圈
記得要改變 x 的條件,不然他永遠不會到終止條件,就會無限迴圈了
x = 0
while x < 10
puts x
x += 1 #記得要改變條件,不然會無限迴圈
end
loop 迴圈(如果要終止記得要有 break)
i = 0
loop do
puts i
i += 1
break if i > 10 #要寫出跳出的條件,如果沒有就無限迴圈
end
method 式迴圈:
主要是因為 ruby 的數字物件上,有幫忙寫了很多方法,所以可以這樣使用。
5.times do
puts "hello, ruby"
end
1.upto(10) do |i|
puts "hello, ruby #{i}"
end
10.downto(1) do |i|
puts "hello, ruby #{i}"
end
迭代式迴圈
each 這個方法的功能,就是針對陣列裡的每個內容,都跑過一次 。
names = ["mino", "amy", "john", "vicky"]
#不用寫條件,因為他就是會每個都跑過一次
names.each do |name|
puts name
end
#如果想要額外做索引累加,使用 with_index
names.each.with_index do |name, x|
puts "#{x} #{name}"
end
有了這些好用的迴圈方法,下次寫重複性很高的機械行為時,就方便很多了。