Sobes.tech
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).
    • return dentro 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).
    • return dentro del procedimiento devuelve un valor desde el contexto donde fue definido (como return en 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.