Выражения case/when
Многостороннее ветвление
«Выражения case/when» — бесплатный урок Ruby Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ruby Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ruby Academy содержит 4 уроков всего.
Ветвление по нескольким вариантам
Когда одно значение сравнивается со множеством вариантов, длинная цепочка if/elsif становится громоздкой. Выражение Ruby case делает ветвление по нескольким вариантам ясным и удобочитаемым.
day = "Mon"
case day
when "Sat", "Sun"
puts "Weekend"
else
puts "Weekday"
endОсновы case / when
Значение после case по очереди сравнивается с каждым when. Выполняется первая подходящая ветвь, после чего управление переходит к end.
grade = "B"
case grade
when "A"
puts "Excellent"
when "B"
puts "Good"
when "C"
puts "Okay"
endНесколько значений в when
Перечислите несколько значений в одном when, разделив их запятыми. Если совпадёт хотя бы одно из них, выполняется эта ветвь.
char = "e"
case char
when "a", "e", "i", "o", "u"
puts "Vowel"
else
puts "Consonant"
endВетвь else
Добавьте else как ветвь по умолчанию. Без неё case без совпадения просто возвращает nil.
code = 500
case code
when 200
puts "OK"
when 404
puts "Not Found"
else
puts "Other status"
endcase — это выражение
Как и if, case возвращает значение совпавшей ветви, поэтому его можно сразу присвоить переменной.
score = 82
letter = case
when score >= 90 then "A"
when score >= 80 then "B"
else "C"
end
puts letterКлючевое слово then
Используйте then, чтобы разместить тело короткой ветви на одной строке с when.
n = 3
case n
when 1 then puts "one"
when 2 then puts "two"
when 3 then puts "three"
endСопоставление с диапазонами
when может содержать диапазон. Ruby использует оператор === в фоновом режиме, а === диапазона проверяет принадлежность к нему.
score = 73
case score
when 90..100 then puts "A"
when 70..89 then puts "B"
when 0..69 then puts "C"
endСопоставление по классу
Поскольку Class === object возвращает true, когда объект является экземпляром класса, можно выполнять ветвление по типу.
value = 3.14
case value
when Integer then puts "an integer"
when Float then puts "a float"
when String then puts "a string"
endМагия ===
Каждый when вызывает pattern === value. Диапазоны, классы и регулярные выражения определяют полезное поведение ===, поэтому case настолько гибок.
email = "jane@example.com"
case email
when /@/ then puts "Looks like an email"
else puts "No @ sign"
endcase без проверяемого значения
Не указывайте значение после case, чтобы записать ясную цепочку логических условий, подобную аккуратной конструкции if/elsif.
temp = 5
case
when temp < 0 then puts "Freezing"
when temp < 15 then puts "Cold"
when temp < 25 then puts "Mild"
else puts "Warm"
endОбъединяем всё вместе
case идеально подходит, когда решение определяется одним значением. Используйте форму без проверяемого значения, когда каждая ветвь является отдельной логической проверкой.
role = :admin
msg = case role
when :admin then "Full access"
when :editor then "Can edit"
when :viewer then "Read only"
else "No access"
end
puts msgБыстрая проверка
Проверьте, насколько хорошо Вы понимаете case/when.
Итоги
Вы изучили выражение case:
whenвыбирает первое совпадение, затем переходит кend.- Один
whenможет содержать несколько значений. caseвозвращает значение и поддерживаетthen.- Диапазоны, классы и регулярные выражения работают, потому что
whenиспользует===. - Форма без проверяемого значения образует ясную цепочку логических условий.
n = 42
kind = case
when n.zero? then "zero"
when n.positive? then "positive"
else "negative"
end
puts kindЧасто задаваемые вопросы
Урок «Выражения case/when» бесплатный?
Да — полный текст урока «Выражения case/when» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ruby Academy, подпишись на CoddyKit PRO. Курс Ruby Academy содержит 4 уроков всего.
Чему я научусь в уроке «Выражения case/when»?
Многостороннее ветвление Ты практикуешь Ruby Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Ruby Academy?
Предыдущий опыт не требуется. Ruby Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Выражения case/when»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Ruby Academy?
Да. Каждый урок Ruby Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- if, unless и тернарный оператор
- Выражения case/when
- Истинность в Ruby
- Защитные условия