Ruby nudi standardnu kontrolu toka (if, , ) ali sa distinktivnim, izrazitim značajkama: (), , moćan , i sklonost prema umjesto tradicionalnih petlji. Kontrola toka u Ruby-u čita se prirodno.
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-ev modifikatorski oblik (puts "x" if condition) stavlja uvjet na kraj za koncizne, čitljive jednolinijske iskaze. unless (= "ako nije") čita se prirodnije nego negacija. I if je izraz koji vraća vrijednost.
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-ev case/when je moćan — poklapa vrijednosti, raspone, tipove, i (u Ruby 3) strukturne uzorke, koristeći === ispod haube. Daleko fleksibilniji od osnovnog switch-a.
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, ali idiomatski Ruby preferiše iteraciju sa blokovima (each, times, map) umjesto eksplicitnih petlji — ekspresivnije i Ruby-like.
Razumijevanje Ruby-eve kontrole toka je temeljno svakodnevno znanje, a nekoliko distinktivnih značajki odražava Ruby-evu ekspresivnu, čitljivu filozofiju.
Modifikatorski oblik (do_x if condition) i unless (= "ako nije") vam omogućavaju pisanje konciznih, engleskog stila uvjetnih iskaza koji su idiomatski Ruby i pojavljuju se neprekidno.
Cinjenica da je if izraz (koji vraća vrijednost) omogućava elegantne dodjele.
Ruby-ev case/when je izuzetno moćan — poklapa vrijednosti, raspone, tipove, i (u Ruby 3) strukturne uzorke preko === — čineći ga daleko fleksibilnijim od osnovnog switch-a i korisnim za čisto grananja na više načina.
Klučno je, idiomatski Ruby preferiše iteraciju sa blokovima (each, times, map, upto) umjesto tradicionalnih for/while petlji — ovo je definirajuća stilska točka: Ruby razvojnjaci iteriraju kolekcije i raspone metodama baziranim na blokovima umjesto eksplicitnih petlji, što je ekspresivnije i Ruby-like.
Razumijevanje tih konstrukta i idioma — modifikatorski oblik i unless za čitljive uvjetne iskaze, moćan case/when, i posebno sklonost prema iteraciji baziranoj na blokovima umjesto eksplicitnih petlji — važno je za pisanje i čitanje idiomatskog Ruby-ja.
Jer se kontrola toka pojavljuje u svakom programu, i jer Ruby-eve ekspresivne forme (modifikatori, unless, moćan case, iteracija sa blokovima) воде njegovu čitljivošću usredotočenu filozofiju, savladavanje njih je neophodno, temeljno znanje za pisanje prirodnog, idiomatskog Ruby-ja umjesto prevođenja uzoraka bogatih petljama iz drugih jezika.