Escritura de un each personalizado
Implemente la iteración
Escritura de un each personalizado es una lección gratuita de Ruby Academy en CoddyKit. Esta es la lección 1 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.
Implementar la iteración
La iteración de Ruby gira en torno a un método: each. Al escribir su propio each, decide cómo se recorre una colección y desbloquea todo el ecosistema de iteración.
class Trio
def each
yield 1
yield 2
yield 3
end
end
Trio.new.each { |n| puts n }each produce valores
Dentro de each, llame a yield una vez por elemento. El bloque que proporciona quien llama recibe cada valor por turnos.
class Days
NAMES = ["Mon", "Tue", "Wed"]
def each
NAMES.each { |d| yield d }
end
end
Days.new.each { |day| puts day }Almacenar datos internos
Normalmente, each recorre los datos almacenados en una variable de instancia.
class Stack
def initialize
@items = []
end
def push(x); @items << x; self; end
def each
@items.each { |i| yield i }
end
end
s = Stack.new
s.push(10).push(20)
s.each { |x| puts x }Orden de recorrido personalizado
Su each puede iterar en el orden que prefiera, por ejemplo, en orden inverso.
class Reversed
def initialize(arr); @arr = arr; end
def each
i = @arr.length - 1
while i >= 0
yield @arr[i]
i -= 1
end
end
end
Reversed.new([1, 2, 3]).each { |x| puts x }Producir varios valores
yield puede pasar más de un valor, que el bloque recibe como varios parámetros, como la clave y el valor de un hash.
class Pairs
def each
yield :a, 1
yield :b, 2
end
end
Pairs.new.each { |key, value| puts "#{key}=#{value}" }each devuelve self
Por convención, each devuelve la propia colección para que las llamadas se puedan encadenar. Devolver self desde each coincide con el comportamiento integrado.
class Box
def initialize(*x); @x = x; end
def each
@x.each { |i| yield i }
self
end
end
result = Box.new(1, 2).each { |i| }
puts result.classUsar block_given?
Evite que falte el bloque para que un each sin bloque no provoque un error, normalmente devolviendo un enumerador, que se explicará más adelante.
class List
def initialize(*x); @x = x; end
def each
return @x.to_enum unless block_given?
@x.each { |i| yield i }
end
end
puts List.new(5, 6).each.classImpulsar otros métodos
Una vez que existe each, puede crear otros métodos basados en él dentro de la misma clase.
class Numbers
def initialize(*n); @n = n; end
def each; @n.each { |i| yield i }; end
def total
sum = 0
each { |i| sum += i }
sum
end
end
puts Numbers.new(1, 2, 3, 4).totalSecuencias calculadas
each no tiene por qué almacenar nada; puede generar valores sobre la marcha.
class Evens
def initialize(limit); @limit = limit; end
def each
n = 0
while n <= @limit
yield n
n += 2
end
end
end
Evens.new(8).each { |x| puts x }La base de Enumerable
Su each es el único componente básico que necesita Enumerable. En la próxima lección lo incluirá y obtendrá decenas de métodos de forma gratuita.
class Range3
def each
(1..3).each { |n| yield n }
end
end
Range3.new.each { |n| print n }
putsCómo encaja todo
Un each personalizado le proporciona control total sobre la iteración:
yielduna vez por elemento.- Recorra en cualquier orden, genere valores o produzca pares.
- Devuelva
selfpor convención.
class Countdown
def initialize(from); @from = from; end
def each
@from.downto(1) { |n| yield n }
end
end
Countdown.new(3).each { |n| puts n }Comprobación rápida
Compruebe cuánto entiende del método each personalizado.
Resumen
Ha aprendido a escribir un each personalizado:
yieldpasa elementos al bloque de quien llama.- Usted controla el orden de recorrido y puede generar valores.
- Devuelva
selfpor convención. eaches la base de Enumerable.
class Squares
def initialize(n); @n = n; end
def each
(1..@n).each { |i| yield i * i }
end
end
Squares.new(4).each { |sq| puts sq }Preguntas frecuentes
¿La lección «Escritura de un each personalizado» es gratis?
Sí — el texto completo de «Escritura de un each personalizado» 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 «Escritura de un each personalizado»?
Implemente la iteración 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 1 de 4.
¿Cuánto tiempo toma la lección «Escritura de un each personalizado»?
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
- Escritura de un each personalizado
- Inclusión de Enumerable
- Enumeradores perezosos
- Objetos Enumerator