window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = vindue if (w.LeadBooster) { console.warn('LeadBooster findes 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: At bruge eller ikke at bruge - The Codest
Codest
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Industrier
    • Fintech og bankvirksomhed
    • E-commerce
    • Adtech
    • Sundhedsteknologi
    • Produktion
    • Logistik
    • Biler
    • IOT
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
Pil tilbage GÅ TILBAGE
2022-07-12
Udvikling af software

Hash: At bruge eller ikke at bruge

Codest

Krzysztof Buszewicz

Senior Software Engineer

Læs en artikel fra vores Ruby-ekspert og find ud af, hvorfor du ikke altid behøver at bruge hash.

Introduktion

Når vi vil samle nogle ting, bruger vi ofte 1TP61Undervis_med_objekt eller udvide den almindelige Sløjfe ved hjælp af #med_objekt. Men i de fleste tilfælde Ruby-udviklere bruger en almindelig hash som aggregator, og måske er det fint, men i denne artikel vil jeg gerne vise dig, at det ikke altid behøver at være en hash.

Sag

Vi antager, at alle filerne er placeret i en mappe (mennesker).

Lad os sige, at vi har følgende mennesker/folk.csv file:

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

Vi vil gerne finde det samlede antal rækker og gennemsnitsalderen - vi kunne skrive følgende script:

people/parser.rb

kræver 'csv'

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

total = aggregeret[:total]
gennemsnitsalder = aggregeret[:totalalder].to_f / total

puts "Total: #{total}"
puts "Gennemsnitsalder: #{gennemsnitsalder}"

Og ja, det gør det, men at læse sådan en Kode er en tvivlsom fornøjelse. Det føles som et for lavt niveau. Vi kan forbedre det ved at levere en dedikeret aggregator til Sløjfe.

people/age_aggregator.rb

klasse AgeAggregator
attrreader :total, :totalage

def initialiser
@total = 0
@total_age = 0
slut

def increment!
@total += 1
end

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

def averageage
totalage.to_f / total
end
slut

Og så ville vores loop se ud som nedenfor:

people/parser.rb

kræver 'csv'
requirerelative './ageaggregator.rb'

aggregated = CSV.foreach('people.csv', headers: true)
.withobject(AgeAggregator.new) do |row, agg|
agg.increment!
agg.incrementage!(række['Alder'].to_i)
slut

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

Jeg synes, det er meget tydeligere.

Sammenfatning

Vi har skrevet mere kode, men vores detaljer på lavere niveau er trukket ud til den separate klasse. Nu læses hovedscriptet meget bedre.

Man kan selvfølgelig argumentere for, at eksemplet er for simpelt til at bruge så mange kræfter på refaktorering, men hold nu op - det er jo bare et eksempel ;). Hvis du skulle samle flere data, er sådanne aggregator-objekter virkelig vejen frem.

Samarbejdsbanner

Læs mere om det:

Fordele og ulemper ved Ruby-softwareudvikling

Skinner og andre transportmidler

Rails-udvikling med TMUX, Vim, Fzf + Ripgrep

Relaterede artikler

Fintech

5 eksempler på den bedste brug af Ruby

Har du nogensinde undret dig over, hvad vi kan gøre med Ruby? Det er nok kun fantasien, der sætter grænser, men vi fortæller gerne om nogle mere eller mindre kendte tilfælde...

Codest
Pawel Muszynski Software Engineer
Udvikling af software

Ansættelse af interne vs. eksterne udviklere

Ansætte internt eller eksternt? Det er et ultimativt dilemma! Find ud af fordelene ved at outsource eller opbygge et in-house team i den følgende artikel.

Codest
Grzegorz Rozmus Leder af Java-enhed
Udvikling af software

The Codest's succeshistorie: Fra Ruby-udvikler til Masterclass-leder

Mød Tomasz Szkaradek - Head of People Operations hos The Codest. Oplev Tomeks karriererejse fra Ruby Manager til medlem af kernegruppen. Hvordan lykkedes det ham...

Codest
Tomasz Szkaradek Udviklingsarkitekt
Udvikling af software

Få mere at vide om Ruby on Rails med Pub/Sub

Pub/Sub kan give projektet mange fordele - det kan gøre koden ren, afkoble tjenester og gøre dem let skalerbare. Få mere at vide om Pub/Sub i følgende artikel...

Codest
Michal Pawlak Senior Ruby-udvikler

Tilmeld dig vores vidensbase, og hold dig opdateret om ekspertisen fra it-sektoren.

    Om os

    The Codest - International softwareudviklingsvirksomhed med tech-hubs i Polen.

    Storbritannien - Hovedkvarter

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

    Polen - Lokale teknologiske knudepunkter

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

      Codest

    • Hjem
    • Om os
    • Serviceydelser
    • Casestudier
    • Ved hvordan
    • Karriere
    • Ordbog

      Serviceydelser

    • Det rådgivende
    • Udvikling af software
    • Backend-udvikling
    • Frontend-udvikling
    • Staff Augmentation
    • Backend-udviklere
    • Cloud-ingeniører
    • Dataingeniører
    • Andet
    • QA-ingeniører

      Ressourcer

    • Fakta og myter om at samarbejde med en ekstern softwareudviklingspartner
    • Fra USA til Europa: Hvorfor beslutter amerikanske startups sig for at flytte til Europa?
    • Sammenligning af Tech Offshore-udviklingsknudepunkter: Tech Offshore Europa (Polen), ASEAN (Filippinerne), Eurasien (Tyrkiet)
    • Hvad er de største udfordringer for CTO'er og CIO'er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Vilkår for brug af hjemmesiden

    Copyright © 2025 af The Codest. Alle rettigheder forbeholdes.

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