클래스와 Regex를 활용한 Case 문
Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 38번째.
앞서 case를 범위와 함께 사용해 보았습니다. 동일한 구문은 클래스 및 정규 표현식에 대해서도 일치 여부를 확인합니다. 이는 모두 when이 내부적으로 호출하는 === 연산자를 통해 이루어집니다.
받은 값의 종류에 따라 분기 처리하려면 클래스별로 매칭하세요:
def describe(value)
case value
when Integer then "a whole number"
when Float then "a decimal"
when String then "some text"
else "something else"
end
end
puts describe(42) # a whole number
puts describe(3.14) # a decimal
puts describe("hi") # some text정규 표현식(regex)에 매칭하여 문자열의 형태, 전화번호, 이메일, 날짜 등에 따라 분기 처리합니다:
def kind_of(text)
case text
when /^\d+$/ then "all digits"
when /@/ then "looks like an email"
when /^[A-Z]/ then "starts with a capital"
else "other"
end
end이것은 if/elsif에서 is_a? 또는 match?를 연쇄적으로 호출하는 것보다 훨씬 더 깔끔합니다.
챌린지
쉬움입력 한 줄을 읽습니다. 입력이 어떻게 보이는지에 따라 다음 레이블 중 하나를 출력하도록 case 문을 사용하세요:
- 모두 숫자이면,
number @를 포함하면:email- 대문자로 시작하면,
name - 그 외의 경우,
unknown
나열된 순서대로 규칙을 확인하세요 (따라서 123은 unknown이 아니라 number이고, kevin@coddy.tech는 email이며, Alice는 name입니다).
입력 kevin@coddy.tech에 대해, 출력은 email입니다.
치트 시트
Ruby의 case/when은 내부적으로 ===를 사용하여 클래스 및 정규 표현식과 매칭됩니다.
클래스로 매칭하기:
case value
when Integer then "a whole number"
when Float then "a decimal"
when String then "some text"
else "something else"
end정규 표현식으로 매칭하기:
case text
when /^\d+$/ then "all digits"
when /@/ then "looks like an email"
when /^[A-Z]/ then "starts with a capital"
else "other"
end직접 해보기
input = gets.chomp
# TODO: case input ... when /^\d+$/, /@/, /^[A-Z]/ ... else ... end
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.