window.pipedriveLeadboosterConfig = { basis: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versie: 2, } ;(functie () { var w = venster als (w.LeadBooster) { console.warn('LeadBooster bestaat al') } anders { w.LeadBooster = { q: [], on: functie (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: functie (n) { this.q.push({ t: 't', n: n }) }, } } })() Hasj: Gebruiken of niet gebruiken - The Codest
The Codest
  • Over ons
  • Diensten
    • Software Ontwikkeling
      • Frontend ontwikkeling
      • Backend ontwikkeling
    • Staff Augmentation
      • Frontend ontwikkelaars
      • Backend ontwikkelaars
      • Gegevensingenieurs
      • Cloud Ingenieurs
      • QA ingenieurs
      • Andere
    • Het advies
      • Audit & Consulting
  • Industrie
    • Fintech & Bankieren
    • E-commerce
    • Adtech
    • Gezondheidstechnologie
    • Productie
    • Logistiek
    • Automotive
    • IOT
  • Waarde voor
    • CEO
    • CTO
    • Leveringsmanager
  • Ons team
  • Case Studies
  • Weten hoe
    • Blog
    • Ontmoetingen
    • Webinars
    • Bronnen
Carrière Neem contact op
  • Over ons
  • Diensten
    • Software Ontwikkeling
      • Frontend ontwikkeling
      • Backend ontwikkeling
    • Staff Augmentation
      • Frontend ontwikkelaars
      • Backend ontwikkelaars
      • Gegevensingenieurs
      • Cloud Ingenieurs
      • QA ingenieurs
      • Andere
    • Het advies
      • Audit & Consulting
  • Waarde voor
    • CEO
    • CTO
    • Leveringsmanager
  • Ons team
  • Case Studies
  • Weten hoe
    • Blog
    • Ontmoetingen
    • Webinars
    • Bronnen
Carrière Neem contact op
Pijl terug KEREN TERUG
2022-07-12
Software Ontwikkeling

Hasj: Gebruiken of niet gebruiken

The Codest

Krzysztof Buszewicz

Senior Software Engineer

Lees een artikel van onze Ruby Expert en leer waarom je deze hash niet altijd hoeft te gebruiken.

Inleiding

Als we iets willen samenvoegen, gebruiken we vaak 1TP63Onderwijzen_met_voorwerp of de reguliere lus met #met_voorwerp. Maar in de meeste gevallen Ruby ontwikkelaars gebruiken een gewone hash als aggregator en misschien is dat prima, maar in dit artikel wil ik je laten zien dat het niet altijd een hash hoeft te zijn.

Zaak

We nemen aan dat alle bestanden in één map staan (mensen).

Laten we zeggen dat we het volgende hebben mensen/mensen.csv file:

 Voornaam,Achternaam,Leeftijd
 John,Doe,24
 Jane,Dee,45
 Josh,Bee,55
 Andrea,Boya,34
 Andrew,Moore,54

We willen het totaal aantal rijen en de gemiddelde leeftijd vinden - we zouden het volgende script kunnen schrijven:

mensen/parser.rb

vereist 'csv'.

aggregated = CSV.foreach('people.csv', headers: true)
.withobject({totaal: 0, totaal: 0 }) do |row, agg|
agg[:totaal] += 1
agg[:totalage] += rij['Leeftijd'].toi
einde

totaal = geaggregeerd[:totaal]
gemiddelde leeftijd = agg[:totalage].to_f / totaal

puts "Totaal: #{totaal}"
puts "Gemiddelde leeftijd: #{gemiddelde_leeftijd}"

En ja, het doet het ding, maar het lezen van zo'n code is een twijfelachtig plezier. Het voelt als een te laag niveau. We kunnen het verbeteren door een speciale aggregator voor de lus.

mensen/leeftijd_aggregator.rb

klasse Leeftijdsaggregator
lezer :totaal, :totale leeftijd

def initialiseren
@totaal = 0
@totaal_leeftijd = 0
einde

def increment!
@totaal += 1
einde

def increment!(age)
@totaal += leeftijd
einde

def gemiddelde
totaal.tot_f / totaal
einde
einde

En dan zou onze lus er als volgt uitzien:

mensen/parser.rb

vereist 'csv
requirerative './leeftijdaggregator.rb'

aggregated = CSV.foreach('people.csv', headers: true)
.withobject(AgeAggregator.new) do |row, agg|
agg.increment!
agg.incrementage!(rij['Leeftijd'].to_i)
einde

puts "Totaal: #{geaggregeerd.totaal}"
puts "Gemiddelde leeftijd: #{aggregated.average_age}"

Ik denk dat het veel duidelijker is.

Samenvatting

We hebben meer code geschreven, maar onze details op lager niveau zijn in een aparte klasse ondergebracht. Nu leest het hoofdscript veel beter.

Natuurlijk kun je aanvoeren dat het voorbeeld te simpel is om zoveel moeite te steken in het refactoren, maar kom op - het is maar een voorbeeld ;). Als je meer gegevens moet aggregeren, zijn zulke aggregatorobjecten echt de manier om te redden.

vaandel samenwerking

Lees meer:

Voor- en nadelen van Ruby softwareontwikkeling

Rails en andere transportmiddelen

Rails ontwikkelen met TMUX, Vim, Fzf + Ripgrep

Verwante artikelen

Fintech

5 voorbeelden van het beste gebruik van Ruby

Heb je je ooit afgevraagd wat we met Ruby kunnen doen? Nou, de sky is waarschijnlijk de limit, maar we praten graag over een aantal min of meer bekende gevallen...

The Codest
Pawel Muszynski Software Engineer
Software Ontwikkeling

Interne vs. externe ontwikkelaars inhuren

Intern of extern aanwerven? Het is een ultiem dilemma! Ontdek de voordelen van outsourcing of het opbouwen van een in-house team in het volgende artikel.

The Codest
Grzegorz Rozmus Java Eenheid Leader
Software Ontwikkeling

The Codest's succesverhaal: Van Ruby Dev tot Masterclassleider

Ontmoet Tomasz Szkaradek - Hoofd People Operations bij The Codest. Ontdek Tomek's carrière reis van een Ruby Manager tot een lid van de kerngroep. Hoe heeft hij...

The Codest
Tomasz Szkaradek Ontwikkelingsarchitect
Software Ontwikkeling

Meer informatie over Ruby on Rails met Pub/Sub

Pub/Sub kan veel voordelen opleveren voor het project - het kan de code opschonen, services ontkoppelen en ze eenvoudig schaalbaar maken. Lees meer over Pub/Sub in het volgende artikel...

The Codest
Michal Pawlak Senior Ruby Ontwikkelaar

Abonneer je op onze kennisbank en blijf op de hoogte van de expertise uit de IT-sector.

    Over ons

    The Codest - Internationaal softwareontwikkelingsbedrijf met technische hubs in Polen.

    Verenigd Koninkrijk - Hoofdkantoor

    • Kantoor 303B, 182-184 High Street North E6 2JA
      Londen, Engeland

    Polen - Lokale technologieknooppunten

    • Fabryczna kantorenpark, Aleja
      Pokoju 18, 31-564 Krakau
    • Hersenambassade, Konstruktorska
      11, 02-673 Warschau, Polen

      The Codest

    • Home
    • Over ons
    • Diensten
    • Case Studies
    • Weten hoe
    • Carrière
    • Woordenboek

      Diensten

    • Het advies
    • Software Ontwikkeling
    • Backend ontwikkeling
    • Frontend ontwikkeling
    • Staff Augmentation
    • Backend ontwikkelaars
    • Cloud Ingenieurs
    • Gegevensingenieurs
    • Andere
    • QA ingenieurs

      Bronnen

    • Feiten en fabels over samenwerken met een externe partner voor softwareontwikkeling
    • Van de VS naar Europa: Waarom Amerikaanse startups besluiten naar Europa te verhuizen
    • Tech Offshore Ontwikkelingshubs Vergelijking: Tech Offshore Europa (Polen), ASEAN (Filippijnen), Eurazië (Turkije)
    • Wat zijn de grootste uitdagingen voor CTO's en CIO's?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Gebruiksvoorwaarden website

    Copyright © 2025 door The Codest. Alle rechten voorbehouden.

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