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 almacenarlo 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 una lambda.

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

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

Una lambda es similar, pero más estricta: comprueba que pases el número correcto de argumentos. La forma de flecha -> es la escritura habitual:

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

Ambos pueden pasarse 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 más estricta de los argumentos; usa un Proc cuando quieras un comportamiento más flexible y tolerante.

challenge icon

Desafío

Fácil

Crea una lambda llamada tripler que reciba un número y devuelva el resultado de multiplicarlo 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