The Codest
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Nozares
    • Fintech un banku darbība
    • E-commerce
    • Adtech
    • Healthtech
    • Ražošana
    • Loģistika
    • Automobiļu nozare
    • IOT
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
Atpakaļ bultiņa ATGRIEZTIES ATPAKAĻ
2022-07-12
Programmatūras izstrāde

Hash: Lietot vai nelietot

The Codest

Krzysztof Buszewicz

Vecākais Software Engineer

Izlasiet rakstu, kas nāk no mūsu Ruby Expert, un uzziniet, kāpēc jums nav nepieciešams, lai vienmēr youse hash.

Ievads

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.

Lieta

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.

Kopsavilkums

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.

sadarbības baneris

Lasīt vairāk:

Ruby programmatūras izstrādes plusi un mīnusi

Sliedes un citi transporta līdzekļi

Rails attīstība ar TMUX, Vim, Fzf + Ripgrep

Saistītie raksti

Programmatūras izstrāde

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.

The Codest
Grzegorz Rozmus Java vienības vadītājs
Programmatūras izstrāde

The Codest veiksmes stāsts: No Ruby Dev līdz meistarklases vadītājam

Iepazīstieties ar Tomasz Szkaradek - The Codest Cilvēkresursu operāciju vadītājs. Iepazīstieties ar Tomeka karjeras ceļu no Ruby vadītāja līdz pamatgrupas loceklim. Kā viņam izdevās...

The Codest
Tomasz Szkaradek Attīstības arhitekts
Programmatūras izstrāde

Uzzināt vairāk par Ruby on Rails ar Pub/Sub

Pub/Sub var sniegt projektam daudz priekšrocību - tas var padarīt kodu tīru, atsaistīt pakalpojumus un padarīt tos viegli mērogojamus. Uzziniet vairāk par Pub/Sub šajā rakstā...

The Codest
Michal Pawlak Vecākais Ruby programmētājs

Abonējiet mūsu zināšanu bāzi un saņemiet jaunāko informāciju par IT nozares pieredzi.

    Par mums

    The Codest - starptautisks programmatūras izstrādes uzņēmums ar tehnoloģiju centriem Polijā.

    Apvienotā Karaliste - Galvenā mītne

    • 303B birojs, 182-184 High Street North E6 2JA
      Londona, Anglija

    Polija - Vietējie tehnoloģiju centri

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Krakova
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polija

      The Codest

    • Sākums
    • Par mums
    • Pakalpojumi
    • Case Studies
    • Zināt, kā
    • Karjera
    • Vārdnīca

      Pakalpojumi

    • Tā Konsultatīvais dienests
    • Programmatūras izstrāde
    • Backend izstrāde
    • Frontend izveide
    • Staff Augmentation
    • Backend izstrādātāji
    • Mākoņa inženieri
    • Datu inženieri
    • Citi
    • QA inženieri

      Resursi

    • Fakti un mīti par sadarbību ar ārējo programmatūras izstrādes partneri
    • No ASV uz Eiropu: Kāpēc Amerikas jaunuzņēmumi nolemj pārcelties uz Eiropu?
    • Tehnoloģiju ārzonas attīstības centru salīdzinājums: Tech Offshore Eiropa (Polija), ASEAN (Filipīnas), Eirāzija (Turcija)
    • Kādi ir galvenie CTO un CIO izaicinājumi?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autortiesības © 2026 The Codest. Visas tiesības aizsargātas.

    lvLatvian
    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 lt_LTLithuanian lvLatvian