0Pricing
Ruby Academy · Lección

Procs

Objetos de bloque reutilizables

Procs es una lección gratuita de Ruby Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Ruby Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Ruby Academy incluye 4 lecciones en total.

Objetos de bloque reutilizables

Un bloque no es un objeto por sí mismo, por lo que no puede almacenarlo en una variable. Un Proc encapsula un bloque en un objeto real que puede guardar, pasar a otras partes del programa y llamar más adelante.

greeter = Proc.new { puts "Hello!" }
greeter.call
greeter.call

Crear Procs

Hay dos formas habituales de crear un Proc: Proc.new { ... } y el método de Kernel más breve proc { ... }. Ambos producen el mismo tipo de objeto.

double = proc { |x| x * 2 }
p double.call(5)

Llamar a un Proc

Puede invocar un Proc de varias formas: .call, .() y la notación abreviada con corchetes [ ]. Son equivalentes.

square = proc { |x| x * x }
puts square.call(4)
puts square.(4)
puts square[4]

Los Procs aceptan argumentos

Los Procs aceptan parámetros igual que los bloques, declarados entre las barras verticales.

add = proc { |a, b| a + b }
puts add.call(3, 7)

Almacenar Procs en arrays

Como los Procs son objetos, puede conservar una colección de comportamientos y ejecutarlos uno tras otro.

ops = [proc { |x| x + 1 }, proc { |x| x * 2 }]
result = 5
ops.each { |op| result = op.call(result) }
puts result

Pasar un Proc como bloque

Anteponer & a un Proc permite pasarlo a un método que espera un bloque. Ruby lo desempaqueta y lo convierte de nuevo en un bloque.

printer = proc { |n| puts "Item: #{n}" }
[1, 2, 3].each(&printer)

Capturar bloques como Procs

También funciona al revés: &block en la firma de un método captura el bloque proporcionado como un Proc que puede almacenar.

def make_handler(&block)
  block
end
h = make_handler { |msg| puts "Got: #{msg}" }
h.call("ping")

Los Procs son flexibles con la aridad

Una característica importante es que los Procs no se quejan cuando el número de argumentos es incorrecto. Los argumentos que faltan se convierten en nil y los adicionales se ignoran.

p1 = proc { |a, b| puts "a=#{a.inspect} b=#{b.inspect}" }
p1.call(1)
p1.call(1, 2, 3)

Procs y return

Un return dentro de un Proc sale del método envolvente, no solo del Proc. Esto puede sorprenderle, así que debe tener cuidado.

def demo
  p = proc { return 10 }
  p.call
  20  # never reached
end
puts demo

Los Procs capturan su entorno

Un Proc recuerda las variables que estaban en el ámbito donde se definió. Esto lo convierte en una clausura, un tema que exploraremos más adelante.

factor = 3
times_factor = proc { |n| n * factor }
puts times_factor.call(10)

Cómo encaja todo

Los Procs convierten los bloques en objetos de primera clase:

  • Créelos con proc { } o Proc.new.
  • Ejecútelos con .call, .() o [ ].
  • Páselos a métodos mediante &.
  • Son flexibles con la aridad y utilizan el return del método.
pipeline = [proc { |s| s.upcase }, proc { |s| s + "!" }]
text = "hello"
pipeline.each { |step| text = step.call(text) }
puts text

Comprobación rápida

Compruebe su comprensión de los Procs.

Repaso

Ha aprendido sobre los Procs:

  • Un Proc es un bloque encapsulado como objeto.
  • Créelo con proc/Proc.new y ejecútelo con .call.
  • Páselo a los métodos mediante &.
  • Tolera discrepancias de aridad y utiliza el return del método.
shout = proc { |word| puts word.upcase }
shout.call("ruby")

Preguntas frecuentes

¿La lección «Procs» es gratis?

Sí — el texto completo de «Procs» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Ruby Academy, actualiza a CoddyKit PRO. El curso de Ruby Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Procs»?

Objetos de bloque reutilizables Practicas Ruby Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Ruby Academy?

No se requiere experiencia previa. Ruby Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Procs»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Ruby Academy?

Sí. Cada lección de Ruby Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Repaso de bloques
  2. Procs
  3. Lambdas
  4. Clausuras y ámbito
← Volver a Ruby Academy