Ruby siūlo standartinį kontrolės srautą (if, , ), tačiau su savitomis, išraiškingomis savybėmis: (), , galingas ir pageidavimą naudoti vietoj tradicinių ciklų. Kontrolės srautas Ruby skaitomas natūraliai.
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 modifikavimo forma (puts "x" if condition) padeda sąlygą pabaigoje, suteikiant kompaktiškus, skaitomus vieneriopus sakinius. unless (= "jei ne") skamba natūraliau nei neiginys. Ir if yra išraiška, kuri grąžina reikšmę.
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 case/when yra galingas — jis atitinka reikšmes, diapazonus, tipus ir (Ruby 3) struktūrinius šablonus, naudodamas === po kapotu. Daug lankstesnis nei bazinis 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 turi while/until, tačiau idiomatiška Ruby pageidauja iteracijos su blokais (each, times, map) virš aiškių ciklų — tai išraiškingiau ir rubygiškiau.
Supratimas apie Ruby kontrolės srautą yra pagrindinės kasdieninės žinios, ir kelios savitos savybės atspindi Ruby išraiškingą, skaitomą filosofiją.
Modifikavimo forma (do_x if condition) ir unless (= "jei ne") leidžia rašyti kompaktiškus, anglų kalbai panašius sąlyginius operatorius, kurie yra idiomatiškas Ruby ir pasirodo nuolat.
Tai, kad if yra išraiška (grąžinanti reikšmę), leidžia elegantiškus priskyrimus.
Ruby case/when yra žymiai galingas — atitikdamas reikšmes, diapazonus, tipus ir (Ruby 3) struktūrinius šablonus per === — jis yra žymiai lankstesnis nei bazinis switch ir naudingas švarai daugiakrypčiai šakoms.
Kritiniu aspektu, idiomatiška Ruby pageidauja iteracijos su blokais (each, times, map, upto) virš tradicinių for/while ciklų — tai yra apibrėžianti stilinė ypatybė: Ruby kūrėjai iteruoja kolekcijas ir diapazonus su blokais pagrįstais metodais, o ne aiškiais ciklais, kurie yra išraiškingiau ir rubygiškiau.
Supratimas apie šias konstrukcijas ir idiomas — modifikavimo formą ir unless skaitomiems sąlyginiam operatoriams, galingą case/when ir ypač pageidavimą bloku pagrįstai iteracijai virš aiškių ciklų — yra svarbu rašant ir skaitant idiomatišką Ruby.
Kadangi kontrolės srautas pasirodo kiekvienoje programoje, ir kadangi Ruby išraiškingos formos (modifikavimo formos, unless, galingas case, blokų iteracija) įkūnija jos skaitomumui skirtą filosofiją, jų įvaldymas yra esminė, pagrindinė žinios, skirta natūraliam, idiomatiškai Ruby rašymui, o ne ciklų suformuotiems šablonams iš kitų programavimo kalbų versti.