Що таке блоки в Ruby?

Блоки в Ruby - це фрагменти коду, які можна передавати методам для виконання певних дій. Вони дозволяють створювати гнучкі та динамічні конструкції програми, такі як замикання (closures) і ітератори. Основні аспекти, пов’язані з блоками в Ruby, включають:

Синтаксис блоків. Блоки можна визначити за допомогою ключових слів do ... end або фігурних дужок { ... }.

3.times do
  puts "Hello"
end

3.times { puts "Hello" }

Передача блоків в методи. Багато методів в Ruby можуть приймати блоки коду як параметри. Їх викликають в середині методу за допомогою ключового слова yield .

def my_method
  puts "Start of method"
  yield if block_given?
  puts "End of method"
end

my_method do
  puts "Inside the block"
end

Параметри блоків. Блоки можуть приймати параметри, які потім можуть використовуватися в їхньому внутрішньому коді. Параметри передаються в блок через вертикальну риску | .

5.times do |i|
  puts "Iteration #{i}"
end

Замикання (Closures). Блоки в Ruby є замиканнями, що означає, що вони можуть зберігати і звертатися до змінних, що оточують їх, навіть після того, як метод, який їх створив, завершив виконання.

def create_closure
  x = 10
  return proc { puts x }
end

closure = create_closure
closure.call  # Виведе 10

Ітератори: Багато вбудованих методів масивів та інших колекцій приймають блоки для виконання певних дій для кожного елементу.

[1, 2, 3].each do |num|
  puts num
end

Proc і Lambda. Proc і Lambda - це об’єкти, які представляють блок коду. Вони взаємозамінні, але є деякі відмінності в тому, як вони обробляють передані їм аргументи і вихід з блоку.

# Proc
my_proc = proc { puts "Hello" }
my_proc.call

# Lambda
my_lambda = -> { puts "Hello" }
my_lambda.call

Це загальний огляд блоків в Ruby. Вони є потужним інструментом для створення зручних та читабельних конструкцій коду.