Ruby გვთავაზობს სტანდარტულ კონტროლის ნაკადს (if, , ), მაგრამ დამახასიათებელი, გამოხატული ფიჩারებით: (), , მძლავრი და უპირატესობა ტრადიციული ციკლების შედეგად. კონტროლის ნაკადი Ruby-ში ბუნებრივად იკითხება.
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-ის მოდიფიკატორის ფორმა (puts "x" if condition) პირობას დასრულების ბოლოს აყენებს სწრაფი, წაკითხვადი ერთი სტრიქონისთვის. unless (= "თუ არა") უფრო ბუნებრივად იკითხება უარყოფაზე. და if არის გამოხატულება, რომელიც ბრუნებს მნიშვნელობას.
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 მძლავრია — იგი ემთხვევა მნიშვნელობებს, დიაპაზონებს, ტიპებს და (Ruby 3-ში) სტრუქტურულ შაბლონებს, ===-ის გამოყენებით ფონის ქვეშ. ბევრად უფრო მოქნილი, ვიდრე ძირითადი 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-ს აქვს while/until, მაგრამ იდიომატური Ruby იტერაციას ბლოკებთან (each, times, map) ასახელებს ხელოვლური ციკლებზე — უფრო გამოხატული და Ruby-სებური.
Ruby-ის კონტროლის ნაკადის გაგება ფუნდამენტური ყოველდღიური ცოდნაა, და რამდენიმე დამახასიათებელი ფიჩარი ასახავს Ruby-ის გამოხატულ, წაკითხვად ფილოსოფიას.
მოდიფიკატორის ფორმა (do_x if condition) და unless (= "თუ არა") საშუალებას გაძლევთ დაწეროთ სწრაფი, ინგლისურივით წაკითხვადი პირობითი განცხადებები, რომლებიც იდიომატური Ruby არის და მუდმივად გვხვდება.
ის ფაქტი, რომ if არის გამოხატულება (მნიშვნელობის დაბრუნება) აძლევს მოქნილ დანიშვულებებს.
Ruby-ის case/when ცნობილია მძლავრი — მნიშვნელობების, დიაპაზონების, ტიპებისა და (Ruby 3-ში) სტრუქტურული შაბლონების შესატყვისი ===-ის საშუალებით — რაც მას ბევრად უფრო მოქნილს ხდის ძირითად switch-ზე და სასარგებლოა სწორი მრავალმხრივი განშტოებისთვის.
მნიშვნელოვნად, იდიომატური Ruby სასურველია ბლოკებთან იტერაცია (each, times, map, upto) ტრადიციული for/while ციკლებზე — ეს განმარტებული სტილის წერტილია: Ruby დეველოპერი ამწოვის კოლექციებს და დიაპაზონებს ბლოკზე დაფუძნებული მეთოდებით ხელოვლური ციკლების ნაცვლად, რაც უფრო გამოხატული და Ruby-სებურია.
ამ კონსტრუქციებისა და იდიომების გაგება — მოდიფიკატორის ფორმა და unless წაკითხვადი პირობითებისთვის, მძლავრი case/when და განსაკუთრებით სასურველია ბლოკზე დაფუძნებული იტერაცია ხელოვლური ციკლებზე — მნიშვნელოვანია Ruby-ის წაკითხვადი და იდიომატური დასაწერად.
ვინაიდან კონტროლის ნაკადი ყველა პროგრამაში გამოჩნდება, და რადგან Ruby-ის გამოხატული ფორმები (მოდიფიკატორები, unless, მძლავრი case, ბლოკის იტერაცია) ამსახვის მის წაკითხვადობაზე ორიენტირებული ფილოსოფიას, მათი ოსტატობა აუცილებელი, ფუნდამენტური ცოდნაა ბუნებრივი, იდიომატური Ruby დასაწერად, ვიდრე მძიმე ციკლის შაბლონების თარგმნა სხვა ენებიდან.