Ruby ofrece flujo de control estándar (, , ) pero con características distintivas y expresivas: (), , el potente , y una preferencia por sobre bucles tradicionales. El flujo de control en Ruby se lee de forma natural.
ifcasewhiledo_x if conditionunlesscase/whenif age >= 18
puts "adult"
elsif age >= 13
puts "teen"
else
puts "child"
end
# MODIFIER form — condition at the END (reads like English, idiomatic for short cases)
puts "adult" if age >= 18
puts "minor" unless age >= 18 # `unless` = if not (more readable than `if !`)
# everything is an expression — if returns a value
grade = if score >= 90 then "A" else "B" end
La forma modificada de Ruby (puts "x" if condition) coloca la condición al final para crear one-liners concisos y legibles. unless (= "if not") se lee más naturalmente que la negación. Y if es una expresión que devuelve un valor.
case status
when :active then "running"
when :stopped, :paused then "halted" # multiple values
when 1..10 then "small number" # ranges
when String then "it's a string" # types (uses ===)
else "unknown"
end
# case can also do structural pattern matching (Ruby 3)
case data
in { name: String => name, age: Integer } # pattern matching with destructuring
puts name
end
El case/when de Ruby es potente — hace coincidir valores, rangos, tipos, y (en Ruby 3) patrones estructurales, utilizando === bajo el capó. Mucho más flexible que un switch básico.
while count < 10 do count += 1 end
until done do ... end # until = while not
# ✅ but Ruby PREFERS iteration with blocks over explicit loops:
5.times { |i| puts i } # instead of a for loop
[1, 2, 3].each { |n| puts n } # iterate a collection
(1..10).each { |n| ... } # iterate a range
1.upto(5) { |i| ... }
Ruby tiene while/until, pero el Ruby idiomático prefiere la iteración con bloques (each, times, map) sobre bucles explícitos — más expresivo y al estilo de Ruby.
Comprender el flujo de control de Ruby es conocimiento fundamental del día a día, y varias características distintivas reflejan la filosofía expresiva y legible de Ruby.
La forma modificada (do_x if condition) y unless (= "if not") te permiten escribir condicionales concisos y semejantes al inglés que son Ruby idiomático y aparecen constantemente.
El hecho de que if sea una expresión (que devuelve un valor) permite asignaciones elegantes.
El case/when de Ruby es notablemente potente — hace coincidir valores, rangos, tipos, y (en Ruby 3) patrones estructurales mediante === — haciéndolo mucho más flexible que un switch básico y útil para ramificación limpia de múltiples caminos.
Crucialmente, el Ruby idiomático prefiere la iteración con bloques (each, times, map, upto) sobre bucles for/while tradicionales — este es un punto de estilo definitorio: los desarrolladores de Ruby iteran colecciones y rangos con métodos basados en bloques en lugar de bucles explícitos, lo que es más expresivo y al estilo de Ruby.
Comprender estas construcciones e idiomas — la forma modificada y unless para condicionales legibles, el potente case/when, y especialmente la preferencia por iteración basada en bloques sobre bucles explícitos — es importante para escribir y leer Ruby idiomático.
Ya que el flujo de control aparece en cada programa, y ya que las formas expresivas de Ruby (modificadores, unless, case potente, iteración de bloques) encarnan su filosofía enfocada en legibilidad, dominarlas es conocimiento esencial y fundamental para escribir Ruby natural e idiomático en lugar de traducir patrones pesados en bucles desde otros lenguajes.