window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versjon: 2, } ;(function () { var w = vindu if (w.LeadBooster) { console.warn('LeadBooster finnes allerede') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Hash: Å bruke eller ikke bruke - The Codest
The Codest
  • Om oss
  • Tjenester
    • Programvareutvikling
      • Frontend-utvikling
      • Backend-utvikling
    • Staff Augmentation
      • Frontend-utviklere
      • Backend-utviklere
      • Dataingeniører
      • Ingeniører i skyen
      • QA-ingeniører
      • Annet
    • Det rådgivende
      • Revisjon og rådgivning
  • Industrier
    • Fintech og bankvirksomhet
    • E-commerce
    • Adtech
    • Helseteknologi
    • Produksjon
    • Logistikk
    • Bilindustrien
    • IOT
  • Verdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leveransesjef
  • Vårt team
  • Casestudier
  • Vet hvordan
    • Blogg
    • Møter
    • Webinarer
    • Ressurser
Karriere Ta kontakt med oss
  • Om oss
  • Tjenester
    • Programvareutvikling
      • Frontend-utvikling
      • Backend-utvikling
    • Staff Augmentation
      • Frontend-utviklere
      • Backend-utviklere
      • Dataingeniører
      • Ingeniører i skyen
      • QA-ingeniører
      • Annet
    • Det rådgivende
      • Revisjon og rådgivning
  • Verdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leveransesjef
  • Vårt team
  • Casestudier
  • Vet hvordan
    • Blogg
    • Møter
    • Webinarer
    • Ressurser
Karriere Ta kontakt med oss
Pil tilbake GÅ TILBAKE
2022-07-12
Programvareutvikling

Hash: Å bruke eller ikke bruke

The Codest

Krzysztof Buszewicz

Senior Software Engineer

Les en artikkel fra vår Ruby-ekspert og lær hvorfor du ikke alltid trenger å bruke hasj.

Innledning

Når vi ønsker å samle noen ting, bruker vi ofte 1TP61Lære_med_objekt eller utvide den vanlige sløyfe ved hjelp av #med_objekt. Men i de fleste tilfeller Ruby-utviklere bruker en vanlig hash som aggregator, og kanskje er det greit, men i denne artikkelen vil jeg vise deg at det ikke alltid trenger å være en hash.

Sak

Vi antar at alle filene er plassert i én katalog (mennesker).

La oss si at vi har følgende people/people.csv file:

 Fornavn,Etternavn,Alder
 John,Doe,24
 Jane,Dee,45
 Josh,Bee,55
 Andrea,Boya,34
 Andrew,Moore,54

Hvis vi ønsker å finne det totale antallet rader og gjennomsnittsalderen, kan vi skrive følgende skript:

people/parser.rb

krever 'csv'

aggregated = CSV.foreach('people.csv', headers: true)
.withobject({ total: 0, totalage: 0 }) do |row, agg|
agg[:total] += 1
agg[:totalage] += rad['Alder'].toi
end

total = aggregert[:total]
gjennomsnittsalder = aggregert[:totalalder].to_f / total

puts "Total: #{total}"
puts "Gjennomsnittsalder: #{gjennomsnittsalder}"

Og ja, det gjør det, men å lese en slik kode er en tvilsom glede. Det føles som et for lavt nivå. Vi kan forbedre det ved å tilby en dedikert aggregator for sløyfe.

people/age_aggregator.rb

klasse AgeAggregator
attrreader :total, :totalage

def initialize
@total = 0
@total_age = 0
end

def increment!
@total += 1
end

def incrementage!(alder)
@totalage += alder
end

def averageage
totalage.to_f / total
end
end

Og da vil løkken vår se ut som nedenfor:

people/parser.rb

krever 'csv'
requirerelative './ageaggregator.rb'

aggregated = CSV.foreach('people.csv', headers: true)
.withobject(AgeAggregator.new) do |row, agg|
agg.inkrement!
agg.incrementage!(rad['Alder'].to_i)
end

puts "Total: #{aggregated.total}"
puts "Gjennomsnittsalder: #{aggregated.average_age}"

Jeg synes det er mye tydeligere.

Sammendrag

Vi har skrevet mer kode, men detaljene på lavere nivå er hentet ut til den separate klassen. Nå leser hovedskriptet mye bedre.

Du kan selvfølgelig hevde at eksempelet er for enkelt til å legge så mye arbeid i refaktorering, men kom igjen - det er bare et eksempel ;). Hvis du måtte aggregere mer data, er slike aggregatorobjekter virkelig veien å redde.

samarbeidsbanner

Les mer om dette:

Fordeler og ulemper med Ruby-programvareutvikling

Skinner og andre transportmidler

Rails-utvikling med TMUX, Vim, Fzf + Ripgrep

Relaterte artikler

Fintech

5 eksempler på hvordan Ruby kan brukes på best mulig måte

Har du noen gang lurt på hva vi kan gjøre med Ruby? Det er nok ingen grenser, men vi snakker gjerne om noen mer eller mindre kjente tilfeller...

The Codest
Pawel Muszynski Software Engineer
Programvareutvikling

Ansette interne vs. eksterne utviklere

Ansette internt eller eksternt? Det er det ultimate dilemmaet! I denne artikkelen kan du lese om fordelene ved å outsource eller bygge opp et internt team.

The Codest
Grzegorz Rozmus Leder for Java-enheten
Programvareutvikling

The Codests suksesshistorie: Fra Ruby-utvikler til mesterklasseleder

Møt Tomasz Szkaradek - Head of People Operations hos The Codest. Oppdag Tomeks karrierereise fra Ruby Manager til medlem av kjernegruppen. Hvordan klarte han å...

The Codest
Tomasz Szkaradek Utviklingsarkitekt
Programvareutvikling

Lær mer om Ruby on Rails med Pub/Sub

Pub/Sub kan gi prosjektet mange fordeler - det kan gjøre koden renere, frakoble tjenester og gjøre dem enkelt skalerbare. Les mer om Pub/Sub i følgende artikkel...

The Codest
Michal Pawlak Senior Ruby-utvikler

Abonner på vår kunnskapsbase og hold deg oppdatert på ekspertisen fra IT-sektoren.

    Om oss

    The Codest - Internasjonalt programvareutviklingsselskap med teknologisentre i Polen.

    Storbritannia - Hovedkvarter

    • Kontor 303B, 182-184 High Street North E6 2JA
      London, England

    Polen - Lokale teknologisentre

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Warszawa, Polen

      The Codest

    • Hjem
    • Om oss
    • Tjenester
    • Casestudier
    • Vet hvordan
    • Karriere
    • Ordbok

      Tjenester

    • Det rådgivende
    • Programvareutvikling
    • Backend-utvikling
    • Frontend-utvikling
    • Staff Augmentation
    • Backend-utviklere
    • Ingeniører i skyen
    • Dataingeniører
    • Annet
    • QA-ingeniører

      Ressurser

    • Fakta og myter om samarbeid med en ekstern programvareutviklingspartner
    • Fra USA til Europa: Hvorfor velger amerikanske oppstartsbedrifter å flytte til Europa?
    • Sammenligning av Tech Offshore Development Hubs: Tech Offshore Europa (Polen), ASEAN (Filippinene), Eurasia (Tyrkia)
    • Hva er de største utfordringene for CTO-er og CIO-er?
    • The Codest
    • The Codest
    • The Codest
    • Retningslinjer for personver
    • Vilkår for bruk av nettstedet

    Opphavsrett © 2025 av The Codest. Alle rettigheter forbeholdt.

    nb_NONorwegian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek nb_NONorwegian