Ruby는 표준 제어 흐름(if, case, )을 제공하지만 독특하고 표현력 있는 기능을 갖추고 있습니다: (), , 강력한 , 그리고 전통적 루프보다 을 선호합니다. Ruby의 제어 흐름은 자연스럽게 읽힙니다.
whiledo_x if conditionunlesscase/whenif age >= 18
puts "adult"
elsif age >= 13
puts "teen"
else
puts "child"
end
# 수식어 형태 — 조건을 끝에 둠 (영어처럼 읽힘, 짧은 경우 관용적)
puts "adult" if age >= 18
puts "minor" unless age >= 18 # `unless` = if not (`if !`보다 읽기 쉬움)
# 모든 것이 표현식 — if는 값을 반환함
grade = if score >= 90 then "A" else "B" end
Ruby의 수식어 형태(puts "x" if condition)는 간결하고 읽기 쉬운 한 줄짜리를 위해 조건을 끝에 둡니다. unless(= "if not")는 부정보다 자연스럽게 읽힙니다. 그리고 if는 값을 반환하는 표현식입니다.
case status
when :active then "running"
when :stopped, :paused then "halted" # 여러 값
when 1..10 then "small number" # 범위(range)
when String then "it's a string" # 타입 (=== 사용)
else "unknown"
end
# case는 구조적 패턴 매칭도 가능 (Ruby 3)
case data
in { name: String => name, age: Integer } # 구조 분해와 함께 패턴 매칭
puts name
end
Ruby의 **case/when**은 강력합니다 — 내부적으로 ===를 사용하여 값, 범위, 타입, (Ruby 3에서는) 구조적 패턴을 매칭합니다. 기본적인 switch보다 훨씬 유연합니다.
while count < 10 do count += 1 end
until done do ... end # until = while not
# ✅ 하지만 Ruby는 명시적 루프보다 block을 통한 반복을 선호:
5.times { |i| puts i } # for 루프 대신
[1, 2, 3].each { |n| puts n } # 컬렉션 반복
(1..10).each { |n| ... } # 범위 반복
1.upto(5) { |i| ... }
Ruby에는 while/until이 있지만, 관용적인 Ruby는 명시적 루프보다 block을 통한 반복(each, times, map)을 선호합니다 — 더 표현력 있고 Ruby답습니다.
Ruby의 제어 흐름을 이해하는 것은 기본적인 일상 지식이며, 몇 가지 독특한 기능은 Ruby의 표현력 있고 읽기 쉬운 철학을 반영합니다.
수식어 형태(do_x if condition)와 unless(= "if not")는 간결하고 영어 같은 조건문을 작성하게 해주며, 이는 관용적인 Ruby이고 끊임없이 등장합니다.
if가 표현식(값을 반환)이라는 사실은 우아한 할당을 가능하게 합니다.
Ruby의 **case/when**은 특히 강력합니다 — ===를 통해 값, 범위, 타입, (Ruby 3에서는) 구조적 패턴을 매칭하여 — 기본적인 switch보다 훨씬 유연하며 깔끔한 다중 분기에 유용합니다.
결정적으로, 관용적인 Ruby는 전통적 for/while 루프보다 block을 통한 반복(each, times, map, upto)을 선호합니다 — 이는 정의적인 스타일 지점입니다: Ruby 개발자는 명시적 루프보다 block 기반 메서드로 컬렉션과 범위를 반복하며, 이것이 더 표현력 있고 Ruby답습니다.
이 구조와 관용구들 — 읽기 쉬운 조건문을 위한 수식어 형태와 unless, 강력한 case/when, 그리고 특히 명시적 루프보다 block 기반 반복을 선호하는 것 — 을 이해하는 것은 관용적인 Ruby를 작성하고 읽는 데 중요합니다.
제어 흐름은 모든 프로그램에 등장하고, Ruby의 표현력 있는 형태(수식어, unless, 강력한 case, block 반복)가 가독성 중심 철학을 구현하므로, 이를 숙달하는 것은 다른 언어의 루프 중심 패턴을 옮기는 대신 자연스럽고 관용적인 Ruby를 작성하는 데 필수적이고 기초적인 지식입니다.