Строчные if / unless
Часть раздела Логика и управление потоком путешествия по Ruby на Coddy. Урок 41 из 56.
Ruby позволяет ставить if и unless в конце одного выражения в качестве однострочного модификатора. Это читается почти как предложение на английском языке.
puts "Adult" if age >= 18
puts "Save your work" unless savedЭто то же самое, что и:
if age >= 18
puts "Adult"
end
unless saved
puts "Save your work"
endОднострочная форма отлично подходит для защитных проверок (guard-style) в начале метода или для разовых условных обновлений внутри цикла:
return if name.nil? || name.empty?
counts = Hash.new(0)
words.each do |w|
counts[w] += 1 unless w.start_with?("#")
endПодобно тернарному оператору, используйте встроенные модификаторы для коротких инструкций. Если тело состоит более чем из одной строки, напишите вместо этого полноценный блок if.
Задание
ЛегкоПрочитайте список целых чисел, разделенных запятыми. Для каждого числа выведите одну строку, но только если число не равно нулю:
- Выведите
positive: <n>еслиn > 0 - Выведите
negative: <n>если не (unless)n >= 0
Обе строки должны использовать форму инлайнового модификатора (без блока if и else). После цикла выведите Skipped zeros: <count>, где count — это количество нулей, также вычисленное без блока if (используйте count).
Для входных данных 3,-2,0,5,0 вывод будет следующим:
positive: 3
negative: -2
positive: 5
Skipped zeros: 2Попробуйте сами
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: выведите, используя строчный `if` / `unless` для каждого числа
# TODO: выведите Skipped zeros: <n>, используя count
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Строки: подробный разбор
Обзор методов строкИнтерполяция строкПеребор строкРазделение и объединениеПовторение — String Weaver4Блоки, Proc и Lambda
Что такое блок?do..end и фигурные скобкиКлючевое слово yieldПараметры блокаProc и LambdaПовторение — пользовательский итератор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Повторение — конвейер данных8Продвинутый выбор решений
Case с классами и Regexwhen с несколькими значениямиТернарный операторСтрочные if / unlessПовторение — классификатор оценок3Двумерные массивы
Основы двумерных массивовДоступ к элементам двумерного массиваПеребор двумерных массивовРаспространённые шаблоны для двумерных массивовПовторение — операции с матрицами6Проект — Менеджер библиотеки
Обзор проектаДобавление книгиПотренируйтесь самостоятельно: Онлайн-компилятор Ruby