window.pipedriveLeadboosterConfig = { bas: 'leadbooster-chat.pipedrive.com', företagId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = fönster if (w.LeadBooster) { console.warn('LeadBooster finns redan') } annars { w.LeadBooster = { q: [], on: funktion (n, h) { this.q.push({ t: "o", n: n, h: h }) }, trigger: funktion (n) { this.q.push({ t: 't', n: n }) }, } } })() Hash: Att använda eller inte använda - The Codest
Codest
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Industrier
    • Fintech & bankverksamhet
    • E-commerce
    • Adtech
    • Hälsoteknik
    • Tillverkning
    • Logistik
    • Fordon
    • IOT
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
Pil tillbaka GÅ TILLBAKA
2022-07-12
Utveckling av programvara

Hash: Att använda eller inte använda

Codest

Krzysztof Buszewicz

Senior Software Engineer

Läs en artikel från vår Ruby Expert och lär dig varför du inte behöver alltid youse hash.

Inledning

När vi vill sammanställa vissa saker använder vi ofta 1TP61Undervisa_med_föremål eller förlänga den ordinarie Loop med hjälp av #med_föremål. Men i de flesta fall Ruby-utvecklare använder en vanlig hash som aggregat och kanske är det bra, men i den här artikeln vill jag visa dig att det inte alltid behöver vara en hash.

Fallet

Vi antar att alla filer är placerade i en katalog (människor).

Låt oss säga att vi har följande människor/människor.csv file:

 Förnamn,Efternamn,Ålder
 John,Doe,24
 Jane,Dee,45
 Josh,Bee,55
 Andrea,Boya,34
 Andrew,Moore,54

Vi vill ta reda på det totala antalet rader och medelåldern - vi kan skriva följande skript:

människor/parser.rb

kräver 'csv'

aggregerad = CSV.foreach('people.csv', rubriker: true)
.withobject({ total: 0, totalage: 0 }) do |row, agg|
agg[:total] += 1
agg[:totalage] += rad['Ålder'].toi
slut

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

puts "Total: #{total}"
puts "Genomsnittlig ålder: #{genomsnittlig_ålder}"

Och ja, det gör saken men att läsa en sådan kod är ett tveksamt nöje. Det känns som en för låg nivå. Vi kan förbättra den genom att tillhandahålla en dedikerad aggregator för Loop.

människor/ålder_aggregator.rb

klass AgeAggregator
attrreader :total, :totalage

def initialisera
@total = 0
@total_ålder = 0
slut

def inkrementering!
@total += 1
slut

def inkrementering!(ålder)
@totalage += ålder
slut

def genomsnitt
totalage.to_f / total
slut
slut

Och då skulle vår loop se ut som nedan:

människor/parser.rb

kräver 'csv'
kravrelativ './ageaggregator.rb'

aggregerad = CSV.foreach('people.csv', headers: true)
.withobject(AgeAggregator.new) do |row, agg|
agg.ökning!
agg.incrementage!(rad['Ålder'].to_i)
slut

puts "Totalt: #{aggregated.total}"
puts "Medelålder: #{aggregated.average_age}"

Jag tycker att det är mycket tydligare.

Sammanfattning

Vi har skrivit mer kod, men våra detaljer på lägre nivå extraheras till den separata klassen. Nu läses huvudskriptet mycket bättre.

Naturligtvis kan du hävda att exemplet är för enkelt för att lägga så mycket ansträngning på refaktorisering, men kom igen - det är bara ett exempel ;). Om du skulle behöva aggregera mer data är sådana aggregatorobjekt verkligen vägen till räddning.

samarbetsbanner

Läs mer om detta:

För- och nackdelar med mjukvaruutveckling med Ruby

Räls och andra transportmedel

Rails-utveckling med TMUX, Vim, Fzf + Ripgrep

Relaterade artiklar

Fintech

5 exempel på hur Ruby används på bästa sätt

Har du någonsin undrat vad vi kan göra med Ruby? Tja, himlen är förmodligen gränsen, men vi är glada att prata om några mer eller mindre kända fall ...

Codest
Pawel Muszynski Software Engineer
Utveckling av programvara

Anställning av interna eller externa utvecklare

Anställa internt eller externt? Det är det ultimata dilemmat! Ta reda på fördelarna med outsourcing eller att bygga upp ett internt team i följande artikel.

Codest
Grzegorz Rozmus Enhetschef Java
Utveckling av programvara

The Codest:s framgångshistoria: Från Ruby Dev till Masterclass Leader

Möt Tomasz Szkaradek - Head of People Operations på The Codest. Upptäck Tomeks karriärresa från Ruby Manager till medlem av kärngruppen. Hur lyckades han...

Codest
Tomasz Szkaradek Utvecklingsarkitekt
Utveckling av programvara

Läs mer om Ruby on Rails med Pub/Sub

Pub/Sub kan ge många fördelar för projektet - det kan göra koden ren, frikoppla tjänster och göra dem lätt skalbara. Läs mer om Pub/Sub i följande artikel...

Codest
Michal Pawlak Senior Ruby-utvecklare

Prenumerera på vår kunskapsbas och håll dig uppdaterad om expertisen från IT-sektorn.

    Om oss

    The Codest - Internationellt mjukvaruutvecklingsföretag med teknikhubbar i Polen.

    Förenade kungariket - Huvudkontor

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

    Polen - Lokala tekniknav

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

      Codest

    • Hem
    • Om oss
    • Tjänster
    • Fallstudier
    • Vet hur
    • Karriär
    • Ordbok

      Tjänster

    • Det rådgivande
    • Utveckling av programvara
    • Backend-utveckling
    • Frontend-utveckling
    • Staff Augmentation
    • Backend-utvecklare
    • Ingenjörer inom molntjänster
    • Dataingenjörer
    • Övriga
    • QA-ingenjörer

      Resurser

    • Fakta och myter om att samarbeta med en extern partner för mjukvaruutveckling
    • Från USA till Europa: Varför väljer amerikanska startup-företag att flytta till Europa?
    • Jämförelse av Tech Offshore Development Hubs: Tech Offshore Europa (Polen), ASEAN (Filippinerna), Eurasien (Turkiet)
    • Vilka är de största utmaningarna för CTO:er och CIO:er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Användarvillkor för webbplatsen

    Copyright © 2025 av The Codest. Alla rättigheter reserverade.

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