Ruby offre le strutture standard di controllo del flusso (, , ) ma con caratteristiche distintive ed espressive: (), , il potente , e una preferenza per rispetto ai cicli tradizionali. Il controllo del flusso in Ruby è naturale da leggere.
Ruby offre le strutture standard di controllo del flusso (, , ) ma con caratteristiche distintive ed espressive: (), , il potente , e una preferenza per rispetto ai cicli tradizionali. Il controllo del flusso in Ruby è naturale da leggere.
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 modificata di Ruby (puts "x" if condition) posiziona la condizione alla fine per one-liner concisi e leggibili. unless (= "se non") si legge più naturalmente della negazione. E if è un'espressione che restituisce un valore.
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
Il case/when di Ruby è potente — abbina valori, range, tipi e (in Ruby 3) pattern strutturali, utilizzando === internamente. Molto più flessibile di un semplice switch.
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 ha while/until, ma il Ruby idiomatico preferisce l'iterazione con block (each, times, map) rispetto ai cicli espliciti — più espressivo e alla Ruby.
Comprendere il controllo del flusso di Ruby è una conoscenza fondamentale quotidiana, e diverse caratteristiche distintive riflettono la filosofia espressiva e leggibile di Ruby.
La forma modificata (do_x if condition) e unless (= "se non") ti permettono di scrivere condizionali concisi e simili all'inglese che sono Ruby idiomatico e appaiono costantemente.
Il fatto che if sia un'espressione (che restituisce un valore) consente assegnazioni eleganti.
Il case/when di Ruby è notevolmente potente — abbina valori, range, tipi e (in Ruby 3) pattern strutturali tramite === — rendendolo molto più flessibile di un semplice switch e utile per una ramificazione multi-via pulita.
Crucialmente, il Ruby idiomatico preferisce l'iterazione con block (each, times, map, upto) rispetto ai cicli tradizionali for/while — questo è un punto stilistico caratterizzante: gli sviluppatori Ruby iterano collezioni e range con metodi basati su block piuttosto che cicli espliciti, il che è più espressivo e alla Ruby.
Comprendere queste strutture e idiomi — la forma modificata e unless per condizionali leggibili, il potente case/when, e soprattutto la preferenza per l'iterazione basata su block rispetto ai cicli espliciti — è importante per scrivere e leggere Ruby idiomatico.
Poiché il controllo del flusso appare in ogni programma, e poiché le forme espressive di Ruby (modificatori, unless, case potente, iterazione con block) incarnano la sua filosofia incentrata sulla leggibilità, padroneggiarle è una conoscenza essenziale e fondamentale per scrivere Ruby naturale e idiomatico piuttosto che tradurre pattern ricchi di cicli da altri linguaggi.