5 Beispiele für die beste Verwendung von Ruby
Haben Sie sich jemals gefragt, was wir mit Ruby alles machen können? Nun, der Himmel ist wahrscheinlich die Grenze, aber wir sprechen gerne über einige mehr oder weniger bekannte Fälle...
Lesen Sie einen Artikel von unserem Ruby-Experten und erfahren Sie, warum Sie nicht immer Ihren Hash verwenden müssen.
Wenn wir etwas aggregieren wollen, verwenden wir sehr oft 1TP61Unterrichten_mit_Objekt
oder erweitern Sie die reguläre Schleife mit #mit_Objekt
. Aber in den meisten Fällen Ruby-Entwickler verwenden einen einfachen Hash als Aggregator und vielleicht ist das in Ordnung, aber in diesem Artikel möchte ich Ihnen zeigen, dass es nicht immer ein Hash sein muss.
Wir gehen davon aus, dass sich alle Dateien in einem Verzeichnis befinden (Menschen
).
Nehmen wir an, wir haben Folgendes menschen/menschen.csv
file:
Vorname,Nachname,Alter
John,Doe,24
Jane,Dee,45
Josh,Biene,55
Andrea,Boya,34
Andrew,Moore,54
Wir wollen die Gesamtzahl der Zeilen und das Durchschnittsalter ermitteln - wir könnten das folgende Skript schreiben:
people/parser.rb
require 'csv'
aggregated = CSV.foreach('people.csv', headers: true)
.withobject({ total: 0, totalage: 0 }) do |row, agg|
agg[:gesamt] += 1
agg[:totalage] += Zeile['Alter'].toi
end
total = aggregiert[:total]
Durchschnittsalter = aggregiert[:Gesamtalter].to_f / gesamt
puts "Gesamt: #{Gesamt}"
puts "Durchschnittsalter: #{Durchschnittsalter}"
Und ja, das tut es auch, aber das Lesen eines solchen Code ist ein zweifelhaftes Vergnügen. Es fühlt sich wie ein zu niedriges Niveau an. Wir können es verbessern, indem wir einen speziellen Aggregator für die Schleife.
people/age_aggregator.rb
Klasse AgeAggregator
attrreader :total, :totalage
def initialisieren
@total = 0
@gesamt_alter = 0
end
def inkrementieren!
@gesamtzahl += 1
end
def incrementage!(Alter)
@Gesamtmenge += Alter
end
def durchschnittssumme
gesamtsumme.to_f / gesamt
end
end
Dann würde unsere Schleife wie folgt aussehen:
people/parser.rb
require 'csv'
requirerelativ './ageaggregator.rb'
aggregated = CSV.foreach('people.csv', headers: true)
.withobject(AgeAggregator.new) do |row, agg|
agg.increment!
agg.incrementage!(Zeile['Alter'].bis_i)
end
puts "Gesamt: #{aggregiert.gesamt}"
puts "Durchschnittliches Alter: #{aggregiert.durchschnittliches_Alter}"
Ich denke, das ist viel klarer.
Wir haben mehr Code geschrieben, aber unsere Details auf niedrigerer Ebene sind in eine separate Klasse ausgelagert. Jetzt liest sich das Hauptskript viel besser.
Natürlich kann man argumentieren, dass das Beispiel zu einfach ist, um so viel Aufwand in die Überarbeitung zu stecken, aber kommen Sie - es ist nur ein Beispiel ;). Wenn Sie mehr Daten aggregieren müssen, sind solche Aggregator-Objekte wirklich der Weg zur Rettung.
Lesen Sie mehr:
Vor- und Nachteile der Softwareentwicklung in Ruby