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.callCrear 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 resultPasar 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 demoLos 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 { }oProc.new. - Ejecútelos con
.call,.()o[ ]. - Páselos a métodos mediante
&. - Son flexibles con la aridad y utilizan el
returndel método.
pipeline = [proc { |s| s.upcase }, proc { |s| s + "!" }]
text = "hello"
pipeline.each { |step| text = step.call(text) }
puts textComprobació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.newy ejecútelo con.call. - Páselo a los métodos mediante
&. - Tolera discrepancias de aridad y utiliza el
returndel 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.