0Pricing
Ruby Academy · Урок

Повторение блоков

Передавайте блоки методам

«Повторение блоков» — бесплатный урок Ruby Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ruby Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ruby Academy содержит 4 уроков всего.

Передача блоков методам

Блок — это фрагмент кода, который Вы передаёте методу. Многие методы Ruby, например each, принимают блок и выполняют его за Вас. Блоки лежат в основе выразительного стиля Ruby.

[1, 2, 3].each do |n|
  puts n * 10
end

Два синтаксиса блоков

Используйте do ... end для многострочных блоков и фигурные скобки { } для коротких однострочных конструкций. Они работают одинаково.

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

Параметры блока

Имена между вертикальными чертами | | являются параметрами блока. Метод определяет, какие значения в них передать.

{ a: 1, b: 2 }.each do |key, value|
  puts "#{key} = #{value}"
end

yield вызывает блок

Внутри метода yield выполняет переданный блок. Чтобы использовать yield, не нужно объявлять блок в списке параметров.

def twice
  yield
  yield
end
twice { puts "Hi" }

Аргументы для yield

Передавайте значения в блок через yield. Они попадут в параметры блока.

def greet_each(names)
  names.each { |n| yield n }
end
greet_each(["Ann", "Bo"]) { |name| puts "Hello #{name}" }

block_given?

Вызов yield без блока приводит к ошибке. Сначала проверьте наличие блока с помощью block_given?, чтобы сделать его необязательным.

def maybe
  if block_given?
    yield
  else
    puts "No block provided"
  end
end
maybe
maybe { puts "Block ran" }

Блоки возвращают значения

Блок вычисляется до своего последнего выражения. Методы вроде map собирают возвращённые значения в новый массив.

squares = [1, 2, 3, 4].map { |n| n * n }
p squares

Значение yield

Сам yield возвращает значение блока, поэтому метод может преобразовать входные данные с помощью блока, предоставленного вызывающим кодом.

def transform(x)
  yield x
end
result = transform(5) { |n| n + 100 }
puts result

Захват блока с помощью &

Добавьте & перед последним параметром, чтобы захватить блок как объект Proc, который можно сохранить или передать дальше.

def run(&block)
  block.call
end
run { puts "Called via block.call" }

Параметры с порядковыми номерами

Современный Ruby позволяет не задавать имя единственного параметра блока: можно использовать _1 (или it в Ruby 3.4 и более новых версиях). Это удобно для коротких блоков.

[10, 20, 30].each { puts _1 }

Собираем всё вместе

Блоки позволяют методам принимать поведение:

  • do...end или { } передают блок.
  • yield выполняет его, а block_given? проверяет, был ли он передан.
  • &block превращает его в объект, который можно использовать повторно.
def repeat(times)
  return unless block_given?
  times.times { |i| yield i }
end
repeat(3) { |i| puts "Step #{i}" }

Быстрая проверка

Проверьте, насколько хорошо Вы поняли блоки.

Повторение

Вы повторили работу с блоками:

  • Блоки передают поведение методам с помощью do...end или { }.
  • yield выполняет блок и возвращает его значение.
  • block_given? делает передачу блоков необязательной.
  • &block сохраняет блок как Proc.
def wrap
  puts "<<"
  yield
  puts ">>"
end
wrap { puts "content" }

Часто задаваемые вопросы

Урок «Повторение блоков» бесплатный?

Да — полный текст урока «Повторение блоков» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ruby Academy, подпишись на CoddyKit PRO. Курс Ruby Academy содержит 4 уроков всего.

Чему я научусь в уроке «Повторение блоков»?

Передавайте блоки методам Ты практикуешь Ruby Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Ruby Academy?

Предыдущий опыт не требуется. Ruby Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Повторение блоков»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Ruby Academy?

Да. Каждый урок Ruby Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Повторение блоков
  2. Procs
  3. Лямбды
  4. Замыкания и область видимости
← Назад к Ruby Academy