Menu
Coddy logo textTech

Однострочные 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.

challenge icon

Задание

Легко

Прочитайте список целых чисел, разделенных запятыми. Для каждого числа выведите одну строку, но только если число не равно нулю:

  • Выведите 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

Шпаргалка

Ruby позволяет использовать if и unless в качестве встроенных модификаторов в конце одного выражения:

puts "Adult" if age >= 18
puts "Save your work" unless saved

Это полезно для защитных условий (guard clauses) или простых условных обновлений:

return if name.nil? || name.empty?

counts[w] += 1 unless w.start_with?("#")

Используйте встроенные модификаторы только для однострочных выражений; для всего, что длиннее, используйте полный блок if.

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

numbers = gets.chomp.split(",").map(&:to_i)

# TODO: выведите, используя строчный `if` / `unless` для каждого числа
# TODO: выведите Skipped zeros: <n>, используя count
quiz iconПроверьте себя

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

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