Middle
¿Qué es una lambda y un procedimiento en Ruby?
sobes.tech AI
Respuesta de la IA
Lambda y procedimiento en Ruby son objetos Proc que encapsulan bloques de código.
Las principales diferencias radican en su comportamiento al devolver valores y en la cantidad de argumentos que aceptan:
-
Lambda:
- Controla estrictamente la cantidad de argumentos (como un método normal).
returndentro de una lambda devuelve un valor solo de ella misma.
# Ejemplo de lambda lambda_proc = lambda { |a, b| return a + b } puts lambda_proc.call(1, 2) # 3 # Error: cantidad incorrecta de argumentos # lambda_proc.call(1) -
Procedimiento (Proc):
- Menos estricto con la cantidad de argumentos (puede no generar error si hay más o menos argumentos de los esperados).
returndentro del procedimiento devuelve un valor desde el contexto donde fue definido (comoreturnen un bloque).
# Ejemplo de procedimiento proc_proc = Proc.new { |a, b| return a + b } def method_with_proc proc_proc = Proc.new { return "retorno desde el método" } proc_proc.call "este texto no será mostrado" end puts method_with_proc # retorno desde el método # No genera error con cantidad incorrecta de argumentos (aunque su comportamiento puede ser impredecible) # proc_proc.call(1)
Comparación:
| Característica | Lambda | Procedimiento |
|---|---|---|
| Control de argumentos | Estricto | No estricto |
Comportamiento return |
Devuelve desde la lambda | Devuelve desde el contexto |
| Clase | Proc (pero con la bandera lambda?) |
Proc |
| Creación | lambda { ... }, -> { ... } |
Proc.new { ... }, proc { ... } |
En la mayoría de los casos, para pasar bloques de comportamiento similares a métodos, es preferible usar lambdas debido a su comportamiento más predecible con argumentos y return. Los procedimientos se usan más para tareas de bajo nivel o cuando su comportamiento específico de return es deseable.