The Codest
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Pramonės šakos
    • Fintech ir bankininkystė
    • E-commerce
    • Adtech
    • Sveikatos technologijos
    • Gamyba
    • Logistika
    • Automobiliai
    • IOT
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
Atgal rodyklė GRĮŽTI ATGAL
2022-07-12
Programinės įrangos kūrimas

Hash: Naudoti ar nenaudoti

The Codest

Krzysztof Buszewicz

Vyresnysis Software Engineer

Perskaitykite mūsų "Ruby" eksperto straipsnį ir sužinokite, kodėl jums nereikia visada naudoti "youse hash".

Įvadas

Kai norime sujungti tam tikrus dalykus, labai dažnai naudojame 1TP69Mokymas_su_objektu arba išplėsti įprastą kilpa naudojant #with_object. Tačiau daugeliu atvejų Ruby kūrėjai kaip agregatorių naudojate paprastą hash ir galbūt tai yra gerai, tačiau šiame straipsnyje norėčiau parodyti, kad tai ne visada turi būti hash.

Byla

Darome prielaidą, kad visi failai yra viename kataloge (žmonės).

Tarkime, kad turime šiuos duomenis people/people.csv file:

 Vardas,Pavardė,Amžius
 John,Doe,24
 Jane,Dee,45
 Josh,Bee,55
 Andrea,Boya,34
 Andrew,Moore,54

Norime rasti bendrą eilučių skaičių ir vidutinį amžių - galėtume parašyti tokį scenarijų:

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
pabaiga

total = aggregated[:total]
averageage = aggregated[:totalage].to_f / total

puts "Iš viso: #{iš viso}"
puts "Vidutinis amžius: #{vidutinis amžius}"

Ir taip, jis daro šį dalyką, bet skaityti tokį kodas yra abejotinas malonumas. Jis jaučiasi per žemo lygio. Galime jį patobulinti pateikdami specialų agregatorių kilpa.

people/age_aggregator.rb

klasė 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

Tada mūsų ciklas atrodytų taip:

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 "Iš viso: #{aggregated.total}"
puts "Vidutinis amžius: #{aggregated.average_age}"

Manau, kad tai daug aiškiau.

Santrauka

Parašėme daugiau kodo, tačiau žemesnio lygio detalės perkeltos į atskirą klasę. Dabar pagrindinis scenarijus skaitomas daug geriau.

Žinoma, galite teigti, kad pavyzdys yra pernelyg paprastas, kad būtų galima dėti tiek pastangų jį pertvarkyti, bet juk tai tik pavyzdys ;). Jei turėtumėte surinkti daugiau duomenys, tokie agreguojantys objektai iš tikrųjų yra gelbėjimosi būdas.

bendradarbiavimo vėliava

Skaityti daugiau:

"Ruby" programinės įrangos kūrimo privalumai ir trūkumai

Bėgiai ir kitos transporto priemonės

"Rails" kūrimas naudojant TMUX, "Vim", Fzf + Ripgrep

Susiję straipsniai

Programinės įrangos kūrimas

Vidaus ir išorės programuotojų samdymas

Ar samdote darbuotojus iš vidaus, ar iš išorės? Tai didžiausia dilema! Sužinokite outsourcing ar vidinės komandos kūrimo privalumus šiame straipsnyje.

The Codest
Grzegorz Rozmus "Java" padalinio vadovas
Programinės įrangos kūrimas

The Codest sėkmės istorija: Nuo "Ruby" programuotojo iki meistriškumo kursų vadovo

Susipažinkite su Tomaszu Szkaradeku - The Codest personalo operacijų vadovu. Susipažinkite su Tomeko karjeros keliu nuo "Ruby" vadybininko iki pagrindinės grupės nario. Kaip jam pavyko...

The Codest
Tomasz Szkaradek Plėtros architektas
Programinės įrangos kūrimas

Sužinokite daugiau apie Ruby on Rails su "Pub/Sub

"Pub/Sub" projektui gali duoti daug naudos - dėl jos kodas gali būti švarus, paslaugos gali būti atskirtos ir lengvai keičiamos. Daugiau apie "Pub/Sub" sužinosite šiame straipsnyje...

The Codest
Michal Pawlak Vyresnysis "Ruby" programuotojas

Prenumeruokite mūsų žinių bazę ir būkite nuolat informuoti apie IT sektoriaus patirtį.

    Apie mus

    The Codest - tarptautinė programinės įrangos kūrimo bendrovė, turinti technologijų centrus Lenkijoje.

    Jungtinė Karalystė - būstinė

    • 303B biuras, 182-184 High Street North E6 2JA
      Londonas, Anglija

    Lenkija - vietiniai technologijų centrai

    • Fabryczna biurų parkas, Aleja
      Pokoju 18, 31-564 Krokuva
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšuva, Lenkija

      The Codest

    • Pagrindinis
    • Apie mus
    • Paslaugos
    • Case Studies
    • Sužinokite, kaip
    • Karjera
    • Žodynas

      Paslaugos

    • Patariamoji tarnyba
    • Programinės įrangos kūrimas
    • Galinės dalies kūrimas
    • Priekinės dalies kūrimas
    • Staff Augmentation
    • Atgalinės versijos kūrėjai
    • Debesų inžinieriai
    • Duomenų inžinieriai
    • Kita
    • QA inžinieriai

      Ištekliai

    • Faktai ir mitai apie bendradarbiavimą su išoriniu programinės įrangos kūrimo partneriu
    • Iš JAV į Europą: Kodėl Amerikos startuoliai nusprendžia persikelti į Europą?
    • Technikos plėtros centrų užsienyje palyginimas: Tech Offshore Europa (Lenkija), ASEAN (Filipinai), Eurazija (Turkija)
    • Kokie yra svarbiausi CTO ir CIO iššūkiai?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autorinės teisės © 2026 The Codest. Visos teisės saugomos.

    lt_LTLithuanian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lvLatvian lt_LTLithuanian