(본 게시물은 저작권의 문제 발생시 출판사의 요청에 의해 삭제될 수 있습니다.)
case 표현식
case표현식은 강력한 괴물이다. 첫 번째 형태는 if구문을 여러개 둔 것과 아주 비슷하다. 여러 개의 조건을 늘어놓고 구문을 실행했을 때 처음으로 참이 되는 구문을 실행한다.
case
when song.name == "Misty"
# blabla
when song.duration > 120
# blabla
when time.now.hour > 21
# blabla
else
song.play
end
두 번째 형태는 아마도 익숙할 것이다. 비교할 대상을 가장 위의 case 옆에 쓰고, 하나 이상의 when을 늘어놓아서 각각 비교한다.
case command
when "debug"
# blabla
when /p\s+(\w+)/
# blabla
when
# blabla~
else
print "wow"
end
if와 마찬가지로 case는 마지막에 수행된 표현식의 결과를 반환한다. 조건과 표현식을 같은 줄에 쓰고 싶다면 then 키워드로 구분한다.
kind = case year
when 1850..1889 then "blues"
when 1890..1909 then "Ragtime"
when 1910..1929 then "New Orleans Jazz"
when 1930..1939 then "Swing"
else "Jazz"
end
case는 비교할 대상을 각각의 when다음에 오는 비교 표현식들과 비교하는 연산을 수행하는데 이때 ===연산자를 통해 이루어진다.
루비의 클래스는 Class 클래스의 인스턴스다. Class에서는 ===를 매개 변수가 해당 클래스의 인스턴스이거나 상위 클래스 중 하나인지 여부를 검사한다. 따라서 객체의 클래스가 어느 것인지 검사할 수 있다.
case shape
when Squre, Rectangle
# ..
when Circle
# ..
when Triangle
# ..
else
# ..
end
끄읕