Ruby oferuje standardową kontrolę przepływu (, , ), ale z charakterystycznymi, wyrażającymi możliwościami: (), , potężny i preferencję dla zamiast tradycyjnych pętli. Przepływ sterowania w Ruby czyta się naturalnie.
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
Ruby'ego forma modyfikująca (puts "x" if condition) umieszcza warunek na końcu dla zwięzłych, czytelnych jednolinijkowców. unless (= "jeśli nie") czyta się bardziej naturalnie niż negacja. A if jest wyrażeniem, które zwraca wartość.
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'ego case/when jest potężny — dopasowuje wartości, zakresy, typy i (w Ruby 3) wzory strukturalne, używając === pod maską. Znacznie bardziej elastyczny niż podstawowy 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 ma while/until, ale idiomatyczne Ruby preferuje iterację z blokami (each, times, map) zamiast jawnych pętli — bardziej wyrażające i Ruby'emu podobne.
Zrozumienie przepływu sterowania w Ruby jest fundamentalną, codzienną wiedzą, a kilka charakterystycznych cech odzwierciedla filozofię Ruby opartą na wyrażaniu się i czytelności.
Forma modyfikująca (do_x if condition) i unless (= "jeśli nie") pozwalają na pisanie zwięzłych, angielskiego podobnych warunków, które są idiomatyczne dla Ruby i pojawiają się stale.
Fakt, że if jest wyrażeniem (zwracającym wartość) umożliwia eleganckie przypisania.
Ruby'ego case/when jest niezwykle potężny — dopasowuje wartości, zakresy, typy i (w Ruby 3) wzory strukturalne za pośrednictwem === — czyniąc go znacznie bardziej elastycznym niż podstawowy switch i przydatnym do czystego rozgałęzienia wielokierunkowego.
Krucjalnie, idiomatyczne Ruby preferuje iterację z blokami (each, times, map, upto) zamiast tradycyjnych pętli for/while — to definiujący punkt stylistyczny: deweloperzy Ruby iterują kolekcje i zakresy za pomocą metod opartych na blokach zamiast jawnych pętli, co jest bardziej wyrażające i Ruby'emu podobne.
Zrozumienie tych konstrukcji i idiomów — forma modyfikująca i unless dla czytelnych warunków, potężny case/when i szczególnie preferencja dla iteracji opartej na blokach zamiast jawnych pętli — jest ważne dla pisania i czytania idiomatycznego Ruby.
Ponieważ przepływ sterowania pojawia się w każdym programie, i ponieważ wyrażające formy Ruby (modyfikatory, unless, potężny case, iteracja z blokami) ucieleśniają jego filozofię skoncentrowaną na czytelności, opanowanie ich jest niezbędną, fundamentalną wiedzą do pisania naturalnego, idiomatycznego Ruby zamiast tłumaczenia pętlowych wzorów z innych języków.