Menu
Coddy logo textTech

Procs y Lambdas

Parte de la sección Lógica y flujo del Journey de Ruby de Coddy. Lección 19 de 56.

Un bloque no es un objeto, no puedes guardarlo en una variable. Cuando quieres un fragmento de código que puedas pasar, guardar y llamar más tarde, lo envuelves en un Proc o un lambda.

Un Proc se crea con Proc.new o la palabra clave proc. Lllámalo con .call:

double = proc { |n| n * 2 }
puts double.call(5)   # 10
puts double.call(7)   # 14

Un lambda es similar pero más estricto, comprueba que pases el número correcto de argumentos. La forma de flecha -> es la sintaxis común:

square = ->(n) { n * n }
puts square.call(4)   # 16
puts square.(4)       # 16  (abreviatura de .call)

Ambos se pueden pasar a un método que espera un bloque anteponiendo &:

[1, 2, 3].map(&double)   # [2, 4, 6]
[1, 2, 3].map(&square)   # [1, 4, 9]

Usa una lambda cuando quieras una comprobación de argumentos más estricta; usa un Proc cuando quieras un comportamiento más ligero y permisivo.

challenge icon

Desafío

Fácil

Crea una lambda llamada tripler que tome un número y lo devuelva multiplicado por 3.

Después lee una lista de enteros separados por comas e imprime, en líneas separadas:

  1. El resultado de llamar a tripler.call(10)
  2. Los números de entrada triplicados (usa map(&tripler)) y unidos con ,

Para la entrada 1,2,3, la salida es:

30
3, 6, 9

Pruébalo tú mismo

# TODO: define `tripler` como una lambda

numbers = gets.chomp.split(",").map(&:to_i)

# TODO: línea 1, imprime tripler.call(10)
# TODO: línea 2, mapea numbers con &tripler, únelos con ", "
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y flujo

Practica por tu cuenta: Compilador de Ruby online