Menu
Coddy logo textTech

Case с классами и Regex

Часть раздела Логика и управление потоком путешествия по Ruby на Coddy. Урок 38 из 56.

Вы уже использовали 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")    # какой-то текст

Сравните с регулярным выражением, чтобы разветвить логику в зависимости от формы строки (номер телефона, 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

Это гораздо чище, чем цепочка вызовов is_a? или match? в if/elsif.

challenge icon

Задание

Легко

Прочитайте одну строку ввода. Используйте оператор case, чтобы вывести одну из этих меток в зависимости от того, как выглядит ввод:

  • Все цифры: number
  • Содержит @: email
  • Начинается с заглавной буквы: name
  • Что угодно другое: unknown

Проверяйте правила в указанном порядке (так 123 — это number, а не unknown; kevin@coddy.tech — это email; Alice — это name).

Для ввода kevin@coddy.tech выводимым значением будет email.

Попробуйте сами

input = gets.chomp

# TODO: case input ... when /^\d+$/, /@/, /^[A-Z]/ ... else ... end
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор Ruby