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   # выходные

Это намного чище, чем объединение || в цепочку в 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.

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

ch = gets.chomp

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

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

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

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