Procs e Lambdas em Ruby um pouco da abordagem funcional

Procs e Lambdas em Ruby um pouco da abordagem funcional
Photo by Dan Cristian Pădureț / Unsplash

No Ruby, tanto Procs quanto Lambdas são objetos que encapsulam blocos de código, que podem ser armazenados em variáveis e passados como argumentos para métodos. Eles são úteis para estratégias de programação como callbacks e funções de ordem superior. Vamos explorar cada um deles e depois analisar o código que você forneceu.

Procs

Um Proc (abreviação de procedure) é um bloco de código que foi encapsulado em um objeto. Procs são flexíveis: eles não se importam com o número correto de argumentos. Se você passar menos argumentos do que o esperado, os argumentos faltantes serão definidos como nil. Se você passar mais, os argumentos extras serão ignorados.

Lambdas

Lambdas são similares aos Procs, mas com algumas diferenças-chave:

  1. Verificação de Argumentos: Lambdas verificam o número de argumentos passados para eles e lançarão um erro se o número não corresponder ao esperado.
  2. Retorno de um Lambda: Quando você usa a palavra-chave return dentro de um lambda, ela retorna apenas do lambda. Em um Proc, return retornará do escopo em que o Proc foi definido.

Seu Código Explicado

def exemplo_proc(&bloco)
  bloco.call
end

meu_proc = Proc.new { puts "Isso é um Proc!" }
exemplo_proc(&meu_proc)

Quando visualizar um código em ruby com: &:id => converte um symbol para Proc object. ou metodo(&parametro) => recebe um valor de bloco de código e converte para Proc.

Neste código:

  1. Definição do Método exemplo_proc: Este método aceita um bloco como argumento. O & na frente do bloco na definição do método é um operador que converte o bloco passado para o método em um objeto Proc.
  2. Criação de um Proc: meu_proc é um objeto Proc criado com Proc.new. Dentro das chaves {} está o bloco de código que o Proc encapsula.
  3. Chamada do Método com um Proc: Quando exemplo_proc(&meu_proc) é chamado, o &meu_proc converte o Proc de volta em um bloco e passa para o método exemplo_proc. Dentro do método, bloco.call é chamado, executando o código dentro do Proc.

Portanto, quando você executa este código, a saída será "Isso é um Proc!", que é o que está definido dentro do bloco do Proc.

Read more