Articles

Implementando Ruby' s Collect Method

El método Collect de Ruby

Ruby’s collect el método es parte del mixin Enumerable; un mixin que proporciona métodos muy útiles y potentes para objetos de colección. collect es un método que uso todo el tiempo y sobre el que escribí recientemente en mi artículo Trabajando con enumerables: Cuatro poderosos métodos de recopilación.

collect le permite transformar cada elemento de su objeto de colección (Matriz, Hash o su propio objeto) en otra cosa, terminando con una matriz.

Este es un ejemplo simple de tomar una matriz de enteros y multiplicar cada uno de ellos por 2.

.collect{ |num| num * 2 }
#

Volver a implementar el método Collect

Quería crear mi propio método collect para ver cómo se implementa. Resulta que se hace con bastante facilidad, en aproximadamente 5 líneas de código. Debo decir que el único caso de uso que no cubro es cuando no se pasa ningún bloque al método, en cuyo caso generalmente se devuelve un Enumerador.

Agregaremos nuestro nuevo kollect(para que los nombres no entren en conflicto) al módulo Enumerable. Recorriendo nuestra colección, aplicaremos el bloque a cada elemento, agregando el resultado devuelto a un nuevo Array que se está creando.

module Enumerable
def kollect
new_ary =
self.each do |elem|
new_ary << yield(elem)
end
new_ary
end
end

Si comparamos esto con el código fuente de Ruby, esencialmente hace lo mismo, pero es mucho más simple porque estamos trabajando con Ruby en sí, y no con C.

Usando nuestro nuevo método de recopilación

Ahora todo lo que queda es ver si el método kollect realmente funciona! Quería probarlo usando la sintaxis de bloque normal, pero también la mano corta &:sintaxis nombre_método, para asegurar que ambos funcionen.

Genial! En ambos casos toma los nombres de la matriz y los convierte en mayúsculas.