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).
returndentro 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).
returndentro de um proc retorna um valor do contexto onde foi definido (comoreturnem 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.