Menu
Coddy logo textTech

do..end против фигурных скобок

Часть раздела Логика и управление потоком путешествия по Ruby на Coddy — урок 16 из 56.

Ruby предоставляет вам два способа написания блока. Они означают одно и то же, но у каждого есть предпочтительный вариант использования.

do...end предназначен для многострочных блоков:

[1, 2, 3].each do |n|
  doubled = n * 2
  puts "#{n} -> #{doubled}"
end

Фигурные скобки { ... } предназначены для однострочных блоков, коротких, в форме выражений:

[1, 2, 3].each { |n| puts n * 2 }

У этих двух вариантов немного разный приоритет, но правило, которое нужно знать учащимся, касается стиля: фигурные скобки для однострочников, do...end для многострочных блоков.

Обе формы могут возвращать значение. Последнее выражение блока — это то, что возвращается в такие методы, как map:

[1, 2, 3].map { |n| n * 10 }    # [10, 20, 30]
[1, 2, 3].map do |n|
  n * 10
end                              # [10, 20, 30]
challenge icon

Задание

Легко

Прочитайте из входных данных список целых чисел, разделенных запятыми. Выведите две строки:

  1. Каждое число, умноженное на два, объединенное через , . Используйте форму map с фигурными скобками.
  2. Строку "<n> squared is <n*n>" для каждого числа, по одной на строку. Используйте форму each с do...end.

Для входных данных 1,2,3 вывод будет следующим:

2, 4, 6
1 squared is 1
2 squared is 4
3 squared is 9

Шпаргалка

Блоки в Ruby имеют два варианта синтаксиса:

Фигурные скобки { ... } для однострочных блоков:

[1, 2, 3].map { |n| n * 2 }  # [2, 4, 6]

do...end для многострочных блоков:

[1, 2, 3].each do |n|
  doubled = n * 2
  puts "#{n} -> #{doubled}"
end

Обе формы возвращают результат последнего выражения в блоке (используется такими методами, как map).

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

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

# TODO: строка 1, удвоенная, форма map с фигурными скобками, объединена через ", "
# TODO: строки 2..n, квадраты, форма each с do...end
quiz iconПроверьте себя

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

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