5 příkladů nejlepšího použití jazyka Ruby
Přemýšleli jste někdy o tom, co všechno můžeme dělat s Ruby? No, obloze se asi meze nekladou, ale rádi si povíme o některých více či méně známých případech...
Přečtěte si článek od našeho odborníka na Ruby a zjistěte, proč nemusíte vždy používat hash.
Když chceme agregovat nějaké věci, velmi často používáme 1TP69Výuka_s_objektem nebo rozšířit pravidelný smyčka pomocí #with_object. Ale ve většině případů Ruby vývojáři používáte jako agregátor obyčejný hash a možná je to v pořádku, ale v tomto článku bych vám rád ukázal, že to nemusí být vždy hash.
Předpokládáme, že všechny soubory jsou umístěny v jednom adresáři (lidé).
Řekněme, že máme následující people/people.csv file:
Jméno,Příjmení,Věk
John,Doe,24
Jane,Dee,45
Josh,Bee,55
Andrea,Boya,34
Andrew,Moore,54
Chceme zjistit celkový počet řádků a průměrný věk - můžeme napsat následující skript:
people/parser.rb
require 'csv'
aggregated = CSV.foreach('people.csv', headers: true)
.withobject({ total: 0, totalage: 0 }) do |row, agg|
agg[:total] += 1
agg[:totalage] += row['Age'].toi
konec
total = aggregated[:total]
averageage = aggregated[:totalage].to_f / total
puts "Celkem: #{celkem}"
puts "Průměrný věk: #{průměrný_věk}"
A ano, to dělá věc, ale čtení takového kód je pochybné potěšení. Připadá mi to jako příliš nízká úroveň. Můžeme ji zlepšit tím, že poskytneme specializovaný agregátor pro smyčka.
people/age_aggregator.rb
třída AgeAggregator
attrreader :total, :totalage
def inicializovat
@total = 0
@total_age = 0
end
def increment!
@total += 1
end
def incrementage!(age)
@totalage += age
end
def averageage
totalage.to_f / total
end
end
Naše smyčka by pak vypadala následovně:
people/parser.rb
require 'csv'
requirerelative './ageaggregator.rb'
aggregated = CSV.foreach('people.csv', headers: true)
.withobject(AgeAggregator.new) do |row, agg|
agg.increment!
agg.incrementage!(row['Age'].to_i)
end
puts "Celkem: #{agregated.total}"
puts "Průměrný věk: #{agregated.average_age}"
Myslím, že je to mnohem jasnější.
Napsali jsme více kódu, ale naše detaily nižší úrovně jsou extrahovány do samostatné třídy. Nyní se hlavní skript čte mnohem lépe.
Samozřejmě můžete namítnout, že příklad je příliš jednoduchý na to, abyste věnovali tolik úsilí refaktorizaci, ale no tak - je to jen příklad ;). Pokud byste potřebovali agregovat více dat, jsou takové objekty agregátoru opravdu cestou k záchraně.

Přečtěte si více:
Výhody a nevýhody vývoje softwaru v jazyce Ruby