Тернарный оператор
Часть раздела Логика и управление потоком путешествия по Ruby на Coddy — урок 40 из 56.
Тернарный оператор — это однострочное сокращение для if/else, которое возвращает значение. Синтаксис: condition ? value_if_true : value_if_false.
age = 20
status = age >= 18 ? "Eligible" : "Not Eligible"
puts status # EligibleЭто то же самое, что написать:
status = if age >= 18
"Eligible"
else
"Not Eligible"
endИспользуйте тернарный оператор, когда обе ветви возвращают короткие значения. Если любой из ветвей требуется более одного выражения, вернитесь к обычному if/else: слишком большое количество кода в тернарном операторе затрудняет чтение.
Вы можете использовать его непосредственно внутри других выражений, включая интерполяцию:
count = 1
puts "#{count} item#{count == 1 ? "" : "s"}" # 1 item
count = 5
puts "#{count} item#{count == 1 ? "" : "s"}" # 5 itemsЗадание
ЛегкоСчитайте целое число n из входных данных. Используя тернарный оператор (без блоков if/else), выведите ровно:
<n> is <label>где label это:
positiveкогдаn > 0negativeкогдаn < 0zeroкогдаn == 0
Подсказка: используйте вложенный тернарный оператор, condition ? a : (other_condition ? b : c).
Для входного значения 5 вывод будет 5 is positive. Для 0 это 0 is zero.
Шпаргалка
Тернарный оператор — это однострочное сокращение для if/else: condition ? value_if_true : value_if_false
age = 20
status = age >= 18 ? "Eligible" : "Not Eligible" # "Eligible"Тернарные операторы могут быть вложенными и использоваться внутри интерполяции строк:
count = 5
puts "#{count} item#{count == 1 ? "" : "s"}" # 5 items
# Вложенный тернарный оператор
n = 3
label = n > 0 ? "positive" : (n < 0 ? "negative" : "zero")Используйте тернарный оператор только для коротких и простых ветвлений — отдавайте предпочтение if/else, когда ветви требуют нескольких выражений.
Попробуйте сами
n = gets.to_i
# TODO: используйте тернарное выражение для создания метки, затем puts
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Строки в деталях
Обзор методов строкИнтерполяция строкИтерация по строкамSplit и JoinИтоги — String Weaver4Блоки, Proc и лямбды
Что такое блок?do..end против фигурных скобокКлючевое слово yieldПараметры блокаProc и лямбдыИтоги: пользовательский итератор7Хеши. Часть 2
Hash.new со значениями по умолчаниюИтерация по хешамВложенные хешиСлияние и преобразованиеИтоги — счетчик частоты10Проект — Учёт студентов
Обзор проектаДобавить студента2Диапазоны
Что такое диапазон?Методы диапазоновДиапазоны в Case / WhenПовторение — практика по диапазонам5Мощь Enumerable
Select и RejectЦепочки MapReduce / Injectcount, all?, any?, none?group_by и partitionsort_by, min_by, max_byИтоги — Data Pipeline8Продвинутые условные конструкции
Case с классами и RegexМножественные значения в whenТернарный операторОднострочные if / unlessПовторение: Классификатор оценок