Menu
Coddy logo textTech

클래스와 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?를 연쇄적으로 호출하는 것보다 훨씬 더 깔끔합니다.

challenge icon

챌린지

쉬움

입력 한 줄을 읽습니다. 입력이 어떻게 보이는지에 따라 다음 레이블 중 하나를 출력하도록 case 문을 사용하세요:

  • 모두 숫자이면, number
  • @를 포함하면: email
  • 대문자로 시작하면, name
  • 그 외의 경우, unknown

나열된 순서대로 규칙을 확인하세요 (따라서 123unknown이 아니라 number이고, kevin@coddy.techemail이며, Alicename입니다).

입력 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
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 및 흐름의 모든 레슨