Vòng Lặp
Vòng lặp dùng để sử dụng để thực thi một câu lệnh hoặc một đoạn mã lệnh lặp đi lặp lại một số lần nhất định.
Vòng Lặp while
Vòng lặp while trong Ruby có cú pháp như sau:
while biểu_thức_điều_kiện [do]
mã_lệnh
end
Khi biểu thức điều kiện trả về giá trị true
thì mã lệnh bên trong mệnh đề while
sẽ được thực thi.
counter = 0
while counter < 5 do
puts "Giá trị của biến counter là: #counter"
$i +=1 # tăng giá trị của counter 1 đơn vị
end
Bạn cũng có thể thay từ khoá do
sau biểu thức điều kiện bởi ký tự ;
hoặc /
.
counter = 0
while counter < 5 \
puts "Giá trị của biến counter là: #counter"
counter +=1 # tăng giá trị của i 1 đơn vị
end
Ngoài ra, vòng lặp while còn được viết với cú pháp khác như sau:
mã_lệnh while biểu_thức_điều_kiện
Ví dụ:
counter = 0
puts "Giá trị của biến counter là #{counter += 1}" while counter > 5
Ví dụ trên sử dụng cú pháp #{counter -= 1}
để hiển giá trị của biến counter
được in ra màn hình sau đó tăng giá trị này đi 1 đơn vị. Việc này sẽ kết thúc cho tới khi nào biến counter > 5
.
Câu lệnh while
còn có thể được viết theo cú pháp sau:
begin
mã_lệnh
end while biểu_thức_điều_kiện
Ví dụ:
counter = 0
begin
puts "Giá trị của biến counter là #{counter += 1}"
end while counter > 5
Sử dụng cách này thì mã lệnh đặt trong câu lệnh begin
luôn được thực thi ít nhất 1 lần ngay cả khi biểu thức điều kiện không trả về giá trị true
ở vòng lặp đầu tiên. Ví dụ sau thay giá trị của counter
là 5 thay vì 0 như lúc trước tuy nhiên mặc dù counter > 5
trả về giá trị false
nhưng vòng lặp vẫn được chạy 1 lần:
counter = 5
begin
puts "Giá trị của biến counter là #{counter += 1}"
end while counter > 5
Vòng lặp for
Vòng lặp for trong Ruby có cú pháp hơi khác so với các ngôn ngữ khác:
for i in 0..5
puts "Giá trị của biến i là: #{i}"
end
Ở ví dụ trên chúng ta sử dụng vòng for để lặp biến i trong phạm vi 0 tới 5 sử dụng kiểu dữ liệu range 0..5
và in ra giá trị của biến này. Bạn sẽ được tìm hiểu về range trong bài học về kiểu dữ liệu.
Vòng lặp each và Blocks
Mặc dù for là vòng lặp được sử dụng phổ biến ở các ngôn ngữ lập trình khác thì trong Ruby each
được sử dụng nhiều hơn:
(1..5).each do |counter|
puts "Giá trị của counter: #{counter}"
end
Ví dụ trên sử dụng phương thức each
có trong kiểu dữ liệu phạm vi 1..5
. Phương thức này sẽ lặp qua từng đơn vị trong phạm vi và gán giá trị lặp này cho biến counter
sau đó in ra màn hình giá trị này.
Vòng lặp each còn có thể được viết sử dụng cú pháp đơn giản như sau:
(1..5).each {|counter| puts "iteration #{counter}"}
Ví dụ trên sửa dụng block (phần bắt đầu từ dấu ngoặc mở {
cho tới dấu ngoặc đóng }
) để thay thế cho cặp từ khoá do...end.
Vòng lặp until
Cú pháp
until biểu_thức_điều_kiện [do]
mã_lệnh
end
Trong đó mã lệnh sẽ được thực thi cho tới khi nào biểu thức điều kiện trả về giá trị là true
.
Trong ví dụ sau giá trị của biến counter
sẽ được hiển thị ra màn hình cho tới khi nào biểu thức counter > 5
trả về giá trị đúng:
counter = 0
until counter > 5 do
puts("Giá trị của biến counter là #{counter += 1}" )
end
Bạn cũng có thể viết vòng lặp until theo cú pháp sau:
mã_lệnh until biểu_thức_điều_kiện
Ví dụ:
puts("Giá trị của biến counter là #{counter += 1}" ) until counter > 5
Hoặc sử dụng cú pháp:
begin
mã_lệnh
end until biểu_thức_điều_kiện
Ví dụ:
counter = 0
begin
puts("Giá trị counter là: #{counter += 1}" )
end until counter > 5
break và next
Sử dụng từ khoá break
được sử dụng để chấm dứt vòng lặp. Ở ví dụ dưới đây vòng lặp sẽ được chấm dứt nếu như biến i có giá trị lớn hơn 2:
for i in 0..5
if i > 2 then
break
end
puts "Giá trị của biến i là #{i}"
end
Sử dụng next để bỏ qua 1 vòng lặp để tiếp tục chạy vòng lặp tiếp theo. Ở ví dụ dưới đây vòng lặp sẽ được bỏ qua khi i có giá trị là 2:
for i in 0..5
if i == 2 then
next
end
puts "Giá trị của biến i là #{i}"
end