Iekšējo un ārējo izstrādātāju pieņemšana darbā
Darbinieku pieņemšana darbā iekšēji vai ārēji? Tā ir vislielākā dilemma! Šajā rakstā uzziniet outsourcing vai iekšējās komandas veidošanas priekšrocības.
Izlasiet rakstu, kas nāk no mūsu Ruby Expert, un uzziniet, kāpēc jums nav nepieciešams, lai vienmēr youse hash.
Ja vēlamies apkopot kādu informāciju, ļoti bieži izmantojam 1TP69Mācība_ar_objektu vai pagarināt regulāro cilpa izmantojot #with_object. Bet vairumā gadījumu Rubīns izstrādātāji kā agregatoru izmantojat vienkāršu hash, un, iespējams, tas ir labi, taču šajā rakstā es vēlos parādīt, ka ne vienmēr ir jāizmanto hash.
Mēs pieņemam, ka visi faili ir ievietoti vienā direktorijā (cilvēki).
Pieņemsim, ka mums ir šādi people/people.csv file:
Vārds,Uzvārds,Vecums
John,Doe,24
Jane,Dee,45
Josh,Bee,55
Andrea,Boya,34
Andrew,Moore,54
Mēs vēlamies atrast kopējo rindu skaitu un vidējo vecumu - mēs varētu uzrakstīt šādu skriptu:
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
beigas
total = aggregated[:total]
averageage = aggregated[:totalage].to_f / total
puts "Kopā: #{total}"
puts "Vidējais vecums: #{average_age}"
Un jā, tas dara lieta, bet lasot šādu kods ir apšaubāms prieks. Tas šķiet pārāk zems līmenis. Mēs to varam uzlabot, nodrošinot īpašu agregatoru. cilpa.
people/age_aggregator.rb
klase 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
Un tad mūsu cilpa izskatīsies šādi:
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 "Kopā: #{aggregated.total}"
puts "Vidējais vecums: #{agregated.average_age}".
Manuprāt, tas ir daudz skaidrāk.
Mēs esam uzrakstījuši vairāk koda, bet mūsu zemāka līmeņa detaļas ir izceltas atsevišķā klasē. Tagad galvenais skripts lasās daudz labāk.
Protams, jūs varat iebilst, ka piemērs ir pārāk vienkāršs, lai ieguldītu tik daudz pūļu refaktorizācijā, bet, lūdzu, tas ir tikai piemērs ;). Ja jums būtu jāapkopo vairāk dati, šādi agregatora objekti ir īstais glābšanas veids.

Lasīt vairāk:
Ruby programmatūras izstrādes plusi un mīnusi