Sobes.tech
Middle

O que é uma lambda e um procedimento em Ruby?

sobes.tech IA

Resposta da IA

Lambda e procedimento em Ruby são objetos Proc que encapsulam blocos de código.

As principais diferenças residem no comportamento ao retornar valores e na quantidade de argumentos que aceitam:

  • Lambda:

    • Controla estritamente a quantidade de argumentos (como um método normal).
    • return dentro de uma lambda retorna um valor apenas de ela mesma.
    # Exemplo de lambda
    lambda_proc = lambda { |a, b| return a + b }
    puts lambda_proc.call(1, 2) # 3
    
    # Erro: quantidade incorreta de argumentos
    # lambda_proc.call(1)
    
  • Proc:

    • Menos estrito quanto à quantidade de argumentos (pode não gerar erro se houver mais ou menos argumentos do que o esperado).
    • return dentro de um proc retorna um valor do contexto onde foi definido (como return em um bloco).
    # Exemplo de proc
    proc_proc = Proc.new { |a, b| return a + b }
    
    def method_with_proc
      proc_proc = Proc.new { return "retorno do método" }
      proc_proc.call
      "este texto não será exibido"
    end
    
    puts method_with_proc # retorno do método
    
    # Não gera erro com quantidade incorreta de argumentos (embora o comportamento possa ser imprevisível)
    # proc_proc.call(1)
    

Comparação:

Característica Lambda Proc
Controle de argumentos Estrito Não estrito
Comportamento return Retorna de dentro da lambda Retorna do contexto
Classe Proc (mas com a flag lambda?) Proc
Criação lambda { ... }, -> { ... } Proc.new { ... }, proc { ... }

Na maioria dos casos, para passar blocos de comportamento semelhantes aos métodos, é preferível usar lambdas devido ao seu comportamento mais previsível com argumentos e return. Procedimentos são mais utilizados para tarefas de baixo nível ou quando seu comportamento específico de return é desejado.