5 ejemplos del mejor uso de Ruby
¿Te has preguntado alguna vez qué podemos hacer con Ruby? Bueno, el cielo es probablemente el límite, pero estaremos encantados de hablar de algunos casos más o menos conocidos...
Lee un artículo de nuestro experto en Ruby y descubre por qué no necesitas siempre este hash.
Cuando queremos agregar algunas cosas, muy a menudo utilizamos 1TP63Enseñar_con_objeto
o ampliar el bucle utilizando #con_objeto
. Pero en la mayoría de los casos Desarrolladores Ruby están utilizando un hash simple como el agregador y tal vez está bien, pero en este artículo, me gustaría mostrarle que no siempre tiene que ser un hash.
Suponemos que todos los archivos se colocan en un directorio (gente
).
Digamos que tenemos lo siguiente personas/personas.csv
file:
Nombre,Apellido,Edad
John,Doe,24
Jane,Dee,45
Josh,Bee,55
Andrea,Boya,34
Andrew,Moore,54
Queremos encontrar el total de filas y la edad media - podríamos escribir el siguiente script:
people/parser.rb
require 'csv'
aggregated = CSV.foreach('gente.csv', cabeceras: true)
.withobject({ total: 0, totalage: 0 }) do |row, agg|
agg[:total] += 1
agg[:totalage] += fila['Edad'].toi
end
total = agregado[:total]
averageage = agregado[:totalage].to_f / total
puts "Total: #{total}"
puts "Edad media: #{edad_media}"
Y sí, hace la cosa pero leer tal código es un placer dudoso. Parece un nivel demasiado bajo. Podemos mejorarlo proporcionando un agregador dedicado para el bucle.
people/age_aggregator.rb
clase AgeAggregator
attrreader :total, :totaledad
def inicializar
@total = 0
@edad_total = 0
end
def incremento
@total += 1
end
def incremento!(edad)
@total += edad
end
def averageage
totalage.to_f / total
end
end
Y entonces nuestro bucle quedaría como sigue
people/parser.rb
require 'csv'
requirerelative './ageaggregator.rb'
aggregated = CSV.foreach('gente.csv', cabeceras: true)
.withobject(AgeAggregator.new) do |row, agg|
¡agg.increment!
agg.incrementage!(fila['Edad'].to_i)
end
puts "Total: #{agregado.total}"
puts "Edad media: #{edad_media_agregada}"
Creo que está mucho más claro.
Hemos escrito más código, pero nuestros detalles de nivel inferior se extraen a la clase separada. Ahora el script principal se lee mucho mejor.
Por supuesto, se puede argumentar que el ejemplo es demasiado simple para poner tanto esfuerzo en la refactorización, pero vamos - es sólo un ejemplo ;). Si tuvieras que agregar más datos, tales objetos agregadores son realmente el camino a rescatar.
Más información:
Ventajas e inconvenientes del desarrollo de software con Ruby