Menu
Coddy logo textTech

Множественные значения в when

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

Один оператор when может сопоставляться с любым из нескольких значений, разделенных запятыми. Ветка срабатывает, если объект равен любому из них.

day = "Sat"
kind = case day
       when "Sat", "Sun"                          then "weekend"
       when "Mon", "Tue", "Wed", "Thu", "Fri"  then "weekday"
       end
puts kind   # weekend

Это гораздо чище, чем выстраивание цепочки || в if/elsif.

Вы также можете смешивать типы значений в одном when: строки, диапазоны, регулярные выражения — все это просто объекты, которые отвечают на ===:

def describe(x)
  case x
  when 0, nil       then "empty"
  when 1..9         then "small"
  when 10..99       then "medium"
  when /^huge:/i    then "flagged huge"
  end
end

Выбирайте те формы, которые позволяют легко прочитать каждую ветку с первого взгляда.

challenge icon

Задание

Легко

Прочитайте один символ (одна строка ввода). Используйте case с ветками when, содержащими несколько значений, чтобы вывести одно из следующих:

  • vowel: ввод является одним из a, e, i, o, u (без учета регистра, сначала преобразуйте ввод в нижний регистр)
  • digit: ввод является одним из 0..9 (используйте диапазон)
  • punctuation: ввод является одним из ., ,, !, ?
  • other: все остальное

Обрабатывайте ввод как строку из одного символа. Проверьте ветку digit, используя диапазон вида "0".."9".

Для ввода E результатом будет vowel; для 7digit; для !punctuation.

Шпаргалка

Инструкция when может соответствовать нескольким значениям, разделенным запятыми:

case day
when "Sat", "Sun" then "weekend"
when "Mon", "Tue", "Wed", "Thu", "Fri" then "weekday"
end

Вы можете смешивать строки, диапазоны и регулярные выражения в одном и том же case:

case x
when 0, nil    then "empty"
when 1..9      then "small"
when /^huge:/i then "flagged huge"
end

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

ch = gets.chomp

# TODO: case ch.downcase ... с ветками when с несколькими значениями
quiz iconПроверьте себя

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

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