Ruby 的迴圈跟迭代

Mino chen
CodeForMyself
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

有了這些好用的迴圈方法,下次寫重複性很高的機械行為時,就方便很多了。

--

--