for i in [1,2,3] do
puts i
end
วิธีิมองคือ ให้เอาค่าใน list มากระทำ
แต่ Ruby นั้นมี syntax sugar นั้นก็คือ Each
[1,2,3].each do |i|
puts i
end
each นั้นจะโยนค่าใน list เข้าไปใส่ใน i
เราสามารถเอาของพวกนี้มาใช้กับ Hash ได้อีก เช่น
h1 = { "room1" => "The Treasure Room", "room2" => "The Throne Room", "loc1" => "A Forest Glade", "loc2" => "A Mountain Stream" }
h1.each do |k,v|
puts "#{k} is #{v}"
end
while
นั้นจะทำงานโดยทำการตรวจสอบเงื่อนไขจาก condition ที่กำหนดไว้ (ในที่นี้คือ tired
) และจะออกจาก loop ก็ต่อเมื่อ condition ไม่ถูกต้อง(หรือเป็น false
นั้นเอง)
เราสามารถเขียน while loop อีกแบบได้ เรียกว่า while modifiers
$x = 1
def tired
return false if $x == 10
true
end
def sleep
puts "sleep"
end
begin
sleep
$x += 1
end while tired
while modifiers
มองดีๆ มันก็คล้าย do..while
ใน C/C++ หรือ Java นั้นเอง
หรือสามารถเขียนบรรทัดเดียวก็ได้เพื่อให้สั้น แต่ statement นั้นต้องมีอันเดียว
puts "x < 100" while x < 100
จุดที่เอาไว้จำนั้นคือ มันคือ while loop
แต่เงื่อนไขตรงกันข้าม เช่น
i = 1
while i == 10
puts i
i += 1
end
i = 1
until i == 10
puts i
i += 1
end
ถ้ามองในความหมายของ while คือ จะทำข้างใน block ก็ต่อเมื่อ i = 10
แต่ความหมายของ until จะตรงกันข้าม
loop
เป็น method
ที่เอาไว้วนรอบแบบไม่รู้จบโดยมันจะเข้าไปทำ statement ที่อยู่ใน {}
หรือว่า do..end
นั้น(ใช้ได้ทั้งสองแบบ)
ตัวอย่าง
arr = [1,2,3,4,5,6]
i = 0
loop do
puts arr[i]
i += 1
break if i == arr.length
end
# or
# loop {
# puts arr[i]
# i += 1
# break if i == arr.length
# }