The Codest
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Odvětví
    • Fintech a bankovnictví
    • E-commerce
    • Adtech
    • Healthtech
    • Výroba
    • Logistika
    • Automobilový průmysl
    • IOT
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
Šipka zpět ZPĚT
2022-07-12
Vývoj softwaru

Hash: Používat či nepoužívat

The Codest

Krzysztof Buszewicz

Senior Software Engineer

Přečtěte si článek od našeho odborníka na Ruby a zjistěte, proč nemusíte vždy používat hash.

Úvod

Když chceme agregovat nějaké věci, velmi často používáme 1TP69Výuka_s_objektem nebo rozšířit pravidelný smyčka pomocí #with_object. Ale ve většině případů Ruby vývojáři používáte jako agregátor obyčejný hash a možná je to v pořádku, ale v tomto článku bych vám rád ukázal, že to nemusí být vždy hash.

Případ

Předpokládáme, že všechny soubory jsou umístěny v jednom adresáři (lidé).

Řekněme, že máme následující people/people.csv file:

 Jméno,Příjmení,Věk
 John,Doe,24
 Jane,Dee,45
 Josh,Bee,55
 Andrea,Boya,34
 Andrew,Moore,54

Chceme zjistit celkový počet řádků a průměrný věk - můžeme napsat následující skript:

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
konec

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

puts "Celkem: #{celkem}"
puts "Průměrný věk: #{průměrný_věk}"

A ano, to dělá věc, ale čtení takového kód je pochybné potěšení. Připadá mi to jako příliš nízká úroveň. Můžeme ji zlepšit tím, že poskytneme specializovaný agregátor pro smyčka.

people/age_aggregator.rb

třída AgeAggregator
attrreader :total, :totalage

def inicializovat
@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

Naše smyčka by pak vypadala následovně:

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 "Celkem: #{agregated.total}"
puts "Průměrný věk: #{agregated.average_age}"

Myslím, že je to mnohem jasnější.

Souhrn

Napsali jsme více kódu, ale naše detaily nižší úrovně jsou extrahovány do samostatné třídy. Nyní se hlavní skript čte mnohem lépe.

Samozřejmě můžete namítnout, že příklad je příliš jednoduchý na to, abyste věnovali tolik úsilí refaktorizaci, ale no tak - je to jen příklad ;). Pokud byste potřebovali agregovat více dat, jsou takové objekty agregátoru opravdu cestou k záchraně.

banner spolupráce

Přečtěte si více:

Výhody a nevýhody vývoje softwaru v jazyce Ruby

Kolejnice a další dopravní prostředky

Vývoj Rails pomocí TMUX, Vim, Fzf + Ripgrep

Související články

Fintech

5 příkladů nejlepšího použití jazyka Ruby

Přemýšleli jste někdy o tom, co všechno můžeme dělat s Ruby? No, obloze se asi meze nekladou, ale rádi si povíme o některých více či méně známých případech...

The Codest
Pawel Muszynski Software Engineer
Vývoj softwaru

Najímání interních a externích vývojářů

Najímání zaměstnanců interně nebo externě? To je zásadní dilema! V následujícím článku se dozvíte, jaké jsou výhody outsourcing nebo budování interního týmu.

The Codest
Grzegorz Rozmus Vedoucí jednotky Java
Vývoj softwaru

Úspěšný příběh společnosti The Codest: Od vývojáře Ruby po vedoucího mistrovské třídy

Seznamte se s Tomaszem Szkaradekem - vedoucím personálního oddělení ve společnosti The Codest. Poznejte Tomkovu kariérní cestu od manažera Ruby po člena hlavní skupiny. Jak se mu podařilo...

The Codest
Tomasz Szkaradek Vývojový architekt
Vývoj softwaru

Další informace o Ruby on Rails s funkcí Pub/Sub

Pub/Sub může projektu přinést mnoho výhod - může zajistit čistotu kódu, oddělit služby a umožnit jejich snadné škálování. Více informací o Pub/Sub najdete v následujícím článku...

The Codest
Michal Pawlak Senior Ruby Developer

Přihlaste se k odběru naší znalostní databáze a získejte aktuální informace o odborných znalostech z oblasti IT.

    O nás

    The Codest - Mezinárodní společnost zabývající se vývojem softwaru s technologickými centry v Polsku.

    Spojené království - ústředí

    • Kancelář 303B, 182-184 High Street North E6 2JA
      Londýn, Anglie

    Polsko - Místní technologická centra

    • Kancelářský park Fabryczna, Aleja
      Pokoju 18, 31-564 Krakov
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polsko

      The Codest

    • Home
    • O nás
    • Služby
    • Case Studies
    • Vědět jak
    • Kariéra
    • Slovník

      Služby

    • To Advisory
    • Vývoj softwaru
    • Vývoj backendu
    • Vývoj frontendů
    • Staff Augmentation
    • Vývojáři backendu
    • Cloudoví inženýři
    • Datoví inženýři
    • Další
    • Inženýři QA

      Zdroje

    • Fakta a mýty o spolupráci s externím partnerem pro vývoj softwaru
    • Z USA do Evropy: Proč se americké startupy rozhodly přesídlit do Evropy?
    • Srovnání technických vývojových center v zahraničí: Tech Offshore Evropa (Polsko), ASEAN (Filipíny), Eurasie (Turecko)
    • Jaké jsou hlavní výzvy CTO a CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Copyright © 2026 by The Codest. Všechna práva vyhrazena.

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