Rubyは標準的な制御フロー(if、case、while)を提供していますが、独特で表現力豊かな機能があります:修飾子形式(do_x if condition)、unless、強力なcase/when、そして従来のループよりブロックによる反復を好む傾向があります。Rubyの制御フローは自然に読むことができます。
条件分岐(if、unless、修飾子形式)
if 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 not")は否定より自然に読めます。そしてifは値を返す式です。
case/when — 強力なパターンマッチング
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**(= "if not")を使うと、簡潔で英語のような条件分岐を書くことができ、これは慣用的なRubyであり常に現れます。
ifが式である(値を返す)という事実は、優雅な代入を可能にします。
Rubyの**case/when**は特に強力です。値、範囲、型、そして(Ruby 3では)===経由の構造的なパターンにマッチさせることができるため、基本的なswitchより柔軟で、クリーンな多方向分岐に有用です。
重要なのは、慣用的なRubyは従来のfor/whileループよりブロックを使った反復(each、times、map、upto)を好むということです。これが定義的なスタイル上のポイントです:Rubyの開発者は明示的なループより、コレクションや範囲をブロックベースのメソッドで反復させます。これはより表現力があり、Rubyらしいです。
これらの構文とイディオムを理解すること — 読みやすい条件分岐のための修飾子形式とunless、強力なcase/when、そして特に明示的なループに対するブロックベースの反復の選好 — は、慣用的なRubyを書いたり読んだりするために重要です。
制御フローはすべてのプログラムに現れ、Rubyの表現力豊かな形式(修飾子、unless、強力なcase、ブロック反復)はその読みやすさ重視の哲学を体現しているため、これらをマスターすることは、他の言語からループが多いパターンを翻訳するのではなく、自然で慣用的なRubyを書くための本質的で基本的な知識です。
