Blocks e yield no Ruby com exemplos de uso

Blocks e yield no Ruby com exemplos de uso
Photo by La-Rel Easter / Unsplash

Os blocos em Ruby são uma forma poderosa e flexível de passar um conjunto de instruções para um método. Eles são usados para executar código dentro do contexto de um método, permitindo que você personalize a execução desse método. Vamos explorar isso com exemplos e detalhes.

O que são Blocos?

Um bloco em Ruby é basicamente um pedaço de código que você pode passar para um método. Ele é definido entre do...end ou chaves {...}. Blocos são usados frequentemente com métodos iteradores, como each, map, etc.

Exemplos Práticos

  1. Iterando com Blocos:
[1, 2, 3].each do |number|
 puts number * 2
end

Neste exemplo, o bloco é passado para o método each. O bloco recebe cada elemento do array e executa o código dentro dele (puts number * 2).

  1. Usando Blocos com {}:
[1, 2, 3].each { |number| puts number * 2 }

Este é o mesmo exemplo anterior, mas usando chaves em vez de do...end. Geralmente, chaves são usadas para blocos de uma única linha.

Uso do yield

yield é uma palavra-chave em Ruby que é usada dentro de um método para chamar um bloco passado para esse método.

  1. Método com yield:
def print_twice
 yield
 yield
end

print_twice { puts "Hello!" }

Aqui, o método print_twice chama o bloco duas vezes. Cada vez que yield é chamado, o bloco { puts "Hello!" } é executado.

  1. Passando Parâmetros para Blocos via yield:
def greet
 yield "Hello"
 yield "Goodbye"
end

greet { |msg| puts "#{msg}, world!" }
Clique na imagem

Neste exemplo, o método greet passa diferentes strings para o bloco usando yield.

Em que Contexto Usar yield

yield é útil quando você quer:

  • Permitir que os usuários de seu método forneçam código adicional que será executado dentro do método.
  • Executar um bloco de código várias vezes dentro de um método.
  • Passar diferentes parâmetros para um bloco em diferentes momentos da execução do método.

Técnicas e Dicas

  • Blocos e Encerramento (Closure): Blocos em Ruby são closures. Eles podem usar e modificar variáveis locais que estão no escopo onde o bloco foi definido.
  • Verificando a Presença de um Bloco: Você pode verificar se um bloco foi passado com o método block_given?.
  • Blocos e Procs: Em Ruby, blocos podem ser convertidos em objetos Proc, permitindo que sejam armazenados em variáveis e passados como argumentos.

Referências

Blocos são uma parte fundamental da programação Ruby e são usados em muitos métodos internos e bibliotecas. Entender como eles funcionam e como usá-los é essencial para escrever código Ruby idiomático e eficiente.

Read more