5 dæmi um bestu notkun Ruby
Hefurðu einhvern tíma velt því fyrir þér hvað við getum gert með Ruby? Jæja, loftið er líklega takmörkin, en við erum fús til að segja frá nokkrum meira eða minna þekktum dæmum...
Lestu grein frá Ruby-sérfræðingi okkar og lærðu hvers vegna þú þarft ekki alltaf að nota hash.
Hér er tómt.Þegar við viljum samansafna einhverju, notum við mjög oft 1TP78Kenna_með_hlut eða framlengja venjulega lykkja að nota #with_object. En í flestum tilfellum Rúbín forritarar Þeir nota einfaldan hash sem samansafnara og kannski er það í lagi, en í þessari grein vil ég sýna þér að það þarf ekki alltaf að vera hash.
Við gerum ráð fyrir að allar skrárnar séu staðsettar í einni möppu (fólk).
Segjum að við höfum eftirfarandi fólk/fólk.csv file:
Fyrsta nafn, Eftirnafn, Aldur
John, Doe, 24
Jane, Dee, 45
Josh, Bee, 55
Andrea, Boya, 34
Andrew, Moore, 54Hljóðskrift
Við viljum finna heildarfjölda raða og meðalaldur – við gætum skrifað eftirfarandi skrift:
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
end
total = aggregated[:total]
averageage = aggregated[:totalage].to_f / total
puts "Samtals: #{total}"
puts "Meðalaldur: #{average_age}"
Og já, það gerir hlutinn en að lesa svona kóði er vafasöm ánægja. Það finnst eins og það sé of lágur stigi. Við getum bætt það með því að bjóða upp á sérhæfðan samansafnara fyrir lykkja.
people/age_aggregator.rb
class AgeAggregator
attrreader :total, :totalage
def initialize
@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
Og þá myndi lykkjan okkar líta svona út:
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 "Samtals: #{aggregated.total}"
puts "Meðalaldur: #{aggregated.average_age}"
Ég held að það sé mun skýrara.
Við höfum skrifað meira kóða, en smáatriðin á lægra stigi hafa verið færð í aðskilda klasa. Nú les aðalskriptan mun betur.
Auðvitað geturðu haldið því fram að dæmið sé of einfalt til að leggja svona mikla vinnu í að endurskipuleggja kóðann, en komon – þetta er bara dæmi ;). Ef þú þyrftir að samræma meira gögn, slík samansafnara-hlutir eru í raun leiðin til að bjarga.

Lesa meira: