還沒接觸學習程式前,看到這個笑話,當時還不知道笑點在哪裡,直到現在....我終於看懂了!!(這代表我有稍微進步嗎!?)
有一天,老婆打電話給他的工程師老公說:
「親愛的,下班幫我買十個包子,若看到賣西瓜的,就買一個。」
結果工程師下班之後只有買一個包子,老婆很疑惑的問:「怎麼只有買一個包子呢?」
老公說:「因為我看到賣西瓜的。」
這是語義不完整造成的誤解:
老婆的意思是:「買十個包子,若看到賣西瓜的,再多買一個西瓜。」
老公的解讀是:「買十個包子,若看到賣西瓜的,改成買一個包子。」
今天就來介紹 迴圈跟迭代吧
在 Ruby 的迴圈主要有幾種:
while 迴圈
句法
while conditional [do]
code
end
counter = 1
while counter < 5 do
puts counter
counter += 1
end
#以這題來說 我們有一個counter = 1 的變數 條件為 值小於 5 就執行,所以會印出。
#=>
1
2
3
4
until
也可以使用until來寫
counter = 1
until counter > 5 do
puts counter
counter += 1
end
for..in 迴圈
假設你有一個陣列
numbers = [1,2,3,4,5]
#想要把他印出來
for number in numbers
puts number
end
#=>
1
2
3
4
5
也可以這樣寫
for i in 1..5 do
puts i
end
#=>
1
2
3
4
5
times, upto, downto 方法
times 意思是 可以指定要跑幾次 像這樣:
5.times do
puts "哈囉你好"
end
#=>
哈囉你好
哈囉你好
哈囉你好
哈囉你好
哈囉你好
upto 跟 downto 範例:
1.upto(5) do |i|
puts "hi, ruby #{i}"
end
#=>
# hi, ruby 1
# hi, ruby 2
# hi, ruby 3
# hi, ruby 4
# hi, ruby 5
5.downto(1) do |i|
puts "hi, ruby #{i}"
end
#=>
# hi, ruby 5
# hi, ruby 4
# hi, ruby 3
# hi, ruby 2
# hi, ruby 1
迭代(iteration)
在 Ruby 中,大括號({ }) 和 do ... end 是可以交替使用的,前者通常用在單行的程式碼,後者用在多行的程式碼區塊。
arr = [1,2,3,4,5]
arr.each do |num|
puts num
end
#除了用 for..in 的方式把陣列裡的東西印出來,更常使用 each 方法來做這件事
hash 的迭代
hash = {apple: "pen", pen: "pineapple"}
# 疊代 key 和 value
hash.each do |key, value|
puts "Key: #{key}, Value: #{value}"
end
# 疊代 key
hash.each_key do |key|
puts key
end
# 疊代 value
hash.each_value do |value|
puts value
end
參考資料:
為你自己學 Ruby on Rails
ruby loop