Ruby cung cấp điều khiển luồng chuẩn (if, , ) nhưng với các tính năng đặc trưng, giàu biểu đạt: (), , mạnh mẽ, và sự ưu tiên cho thay vì vòng lặp truyền thống. Điều khiển luồng trong Ruby đọc tự nhiên.
casewhiledo_x if conditionunlesscase/whenif age >= 18
puts "adult"
elsif age >= 13
puts "teen"
else
puts "child"
end
# dạng MODIFIER — điều kiện ở CUỐI (đọc như tiếng Anh, idiomatic cho trường hợp ngắn)
puts "adult" if age >= 18
puts "minor" unless age >= 18 # `unless` = if not (dễ đọc hơn `if !`)
# mọi thứ đều là biểu thức — if trả về một giá trị
grade = if score >= 90 then "A" else "B" end
Dạng modifier của Ruby (puts "x" if condition) đặt điều kiện ở cuối cho các one-liner súc tích, dễ đọc. unless (= "if not") đọc tự nhiên hơn phủ định. Và if là một biểu thức trả về một giá trị.
case status
when :active then "running"
when :stopped, :paused then "halted" # nhiều giá trị
when 1..10 then "small number" # range
when String then "it's a string" # kiểu (dùng ===)
else "unknown"
end
# case cũng có thể làm structural pattern matching (Ruby 3)
case data
in { name: String => name, age: Integer } # pattern matching với destructuring
puts name
end
case/when của Ruby mạnh mẽ — nó khớp giá trị, range, kiểu, và (trong Ruby 3) structural pattern, dùng === ở bên dưới. Linh hoạt hơn nhiều so với switch cơ bản.
while count < 10 do count += 1 end
until done do ... end # until = while not
# ✅ nhưng Ruby ƯU TIÊN lặp với block thay vì vòng lặp tường minh:
5.times { |i| puts i } # thay vì vòng for
[1, 2, 3].each { |n| puts n } # duyệt một tập hợp
(1..10).each { |n| ... } # duyệt một range
1.upto(5) { |i| ... }
Ruby có while/until, nhưng Ruby idiomatic ưu tiên lặp với block (each, times, map) thay vì vòng lặp tường minh — giàu biểu đạt và đậm chất Ruby hơn.
Hiểu điều khiển luồng của Ruby là kiến thức nền tảng dùng hằng ngày, và một số tính năng đặc trưng phản ánh triết lý biểu đạt, dễ đọc của Ruby. Dạng modifier (do_x if condition) và unless (= "if not") cho phép bạn viết các điều kiện súc tích, giống tiếng Anh vốn idiomatic trong Ruby và xuất hiện liên tục.
Việc if là một biểu thức (trả về giá trị) cho phép các phép gán thanh lịch. case/when của Ruby đặc biệt mạnh mẽ — khớp giá trị, range, kiểu, và (trong Ruby 3) structural pattern qua === — khiến nó linh hoạt hơn nhiều so với switch cơ bản và hữu ích cho phân nhánh nhiều chiều sạch sẽ.
Quan trọng nhất, Ruby idiomatic ưu tiên lặp với block (each, times, map, upto) thay vì các vòng lặp for/while truyền thống — đây là một điểm phong cách định danh: developer Ruby duyệt tập hợp và range với các method dựa trên block thay vì vòng lặp tường minh, giàu biểu đạt và đậm chất Ruby hơn.
Hiểu các cấu trúc và idiom này — dạng modifier và unless cho điều kiện dễ đọc, case/when mạnh mẽ, và đặc biệt là sự ưu tiên lặp dựa trên block thay vì vòng lặp tường minh — là quan trọng để viết và đọc Ruby idiomatic.
Vì điều khiển luồng xuất hiện trong mọi chương trình, và vì các dạng biểu đạt của Ruby (modifier, unless, case mạnh mẽ, lặp block) thể hiện triết lý lấy-dễ-đọc-làm-trọng-tâm của nó, thành thạo chúng là kiến thức thiết yếu, nền tảng để viết Ruby tự nhiên, idiomatic thay vì dịch các pattern nặng vòng lặp từ ngôn ngữ khác.