Ruby nudi standardni nadzor toka programa (if, , ), vendar s posebnimi, izraznimi funkcijami: (), , močni in pred tradicionalnimi zankami. Nadzor toka v Ruby-ju se bere naravno.
casewhiledo_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
Ruby-jeva oblika modifikatorja (puts "x" if condition) postavlja pogoj na konec za jedrnate, berljive enolinijske stavke. unless (= "če ne") se bere bolj naravno kot negacija. In if je izraz, ki vrne vrednost.
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
Ruby-jev case/when je moč — ujema vrednosti, obsege, vrste in (v Ruby 3) strukturne vzorce s pomočjo === v ozadju. Veliko bolj prilagodljiv kot osnovni 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 ima while/until, toda idiomatski Ruby prednost daje iteraciji s premci (each, times, map) pred eksplicitnimi zankami — bolj izrazito in Ruby-ju značilno.
Razumevanje Ruby-jevega nadzora toka je temeljno vsakdanje znanje, in več značilnih funkcij odraža Ruby-jevo izrazno, berljivo filozofijo.
Oblika modifikatorja (do_x if condition) in unless (= "če ne") omogočata pisanje jedrnate, angleško podobne pogojne logike, ki je idiomatska Ruby in se pojavlja nenehno.
Dejstvo, da je if izraz (ki vrne vrednost), omogoča elegantne dodelitve.
Ruby-jev case/when je izjemno moćen — ujema vrednosti, obsege, vrste in (v Ruby 3) strukturne vzorce prek === — kar ga naredi daleč bolj prilagodljivega kot osnovni switch in uporabnega za čisto večsmerno razvejevanje.
Klučno je, da idiomatski Ruby prednost daje iteraciji s premci (each, times, map, upto) pred tradicionalnimi for/while zankami — to je določujući stilski vidik: Ruby razvijalci iterirajo zbirke in obsege s premčnimi metodami namesto eksplicitnih zank, kar je bolj izrazito in Ruby-ju značilno.
Razumevanje teh konstruktov in idiotizmov — oblike modifikatorja in unless za berljivo pogojno logiko, mogočnega case/when in zlasti prednosti iteracije s premci pred eksplicitnimi zankami — je pomembno za pisanje in branje idiomatskega Ruby-ja.
Ker se nadzor toka pojavlja v vsakem programu, in ker Ruby-jeve izrazne oblike (modifikatorji, unless, močni case, iteracija s premci) воплощают его философiju osredotočeno na čitljivost, njihovo obvladovanje je bistveno, temeljno znanje za pisanje naravnega, idiomatskega Ruby-ja namesto prevajanja zančnih vzorcev iz drugih jezikov.