클래스와 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) # 정수
puts describe(3.14) # 소수
puts describe("hi") # 어떤 텍스트정규식에 match하여 문자열의 모양, 전화번호, email, 날짜에 따라 분기합니다:
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?를 연속으로 호출하는 것보다 훨씬 깔끔합니다.
챌린지
쉬움한 줄의 입력을 읽습니다. 입력의 형태(looks)에 따라 case 문을 사용하여 다음 라벨 중 하나를 출력하세요:
- 모두 숫자:
number @포함:email- 대문자로 시작:
name - 그 외 모두:
unknown
나열된 순서대로 규칙을 확인하세요 (따라서 123은 unknown이 아닌 number이고, kevin@coddy.tech는 email이며, Alice는 name입니다).
입력 kevin@coddy.tech에 대한 출력은 email입니다.
직접 해보기
input = gets.chomp
# TODO: case input ... when /^\d+$/, /@/, /^[A-Z]/ ... else ... end
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.