Volver a la página principal
viernes 11 octubre 2024
4

Diferencia entre Proc y lambda en Ruby

En Ruby, tanto Proc como lambda son objetos que permiten almacenar bloques de código para ser ejecutados posteriormente. Sin embargo, existen diferencias clave en su comportamiento, especialmente en el manejo de argumentos y en el flujo de retorno. Conocer cuándo usar cada uno es fundamental para escribir código Ruby más eficiente y robusto.

Diferencias entre Proc y lambda

  • Manejo de argumentos:

Una lambda verifica el número de argumentos que se le pasa y generará un error si la cantidad no coincide con la definida. Por otro lado, un objeto Proc acepta cualquier número de argumentos, asignando nil a los no especificados.

  • Comportamiento de retorno:

En una lambda, el retorno (return) finaliza solo el bloque actual y regresa al método llamador. En cambio, en un Proc, return termina el método completo en el que se define.

Algunos ejemplos

Definición de Proc y lambda

# Creación de una lambda y un Proc
my_lambda = ->(x) { puts "Valor en lambda: #{x}" }
my_proc = Proc.new { |x| puts "Valor en Proc: #{x}" }

# Llamadas
my_lambda.call(5)  # Output: "Valor en lambda: 5"
my_proc.call(5)    # Output: "Valor en Proc: 5"

Diferencia en el manejo de argumentos

# Lambda verifica el número de argumentos
my_lambda = ->(x, y) { puts "Suma: #{x + y}" }
# my_lambda.call(5) generaría un error por número incorrecto de argumentos

# Proc acepta cualquier número de argumentos
my_proc = Proc.new { |x, y| puts "Suma: #{x.to_i + y.to_i}" }
my_proc.call(5)  # Output: "Suma: 5"

Diferencia en el comportamiento de return

def test_lambda
  my_lambda = -> { return "lambda: retorna al método" }
  my_lambda.call
  "Fin de test_lambda"
end

def test_proc
  my_proc = Proc.new { return "Proc: termina el método" }
  my_proc.call
  "Fin de test_proc"
end

puts test_lambda  # Output: "Fin de test_lambda"
puts test_proc    # Output: "Proc: termina el método"

Referencia oficial

Puedes encontrar más información en la documentación oficial de Ruby.

Etiquetas:
ruby
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer