Najímání interních a externích vývojářů
Najímání zaměstnanců interně nebo externě? To je zásadní dilema! V následujícím článku se dozvíte, jaké jsou výhody outsourcing nebo budování interního týmu.
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 měli agregovat více data, jsou takové objekty agregátoru skutečně cestou k záchraně.

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