(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); Hash: Używać czy nie używać - The Codest
The Codest
  • O nas
  • Nasze Usługi
    • Zespoły IT
      • Inżynierowie Frontend
      • Inżynierowie Backend
      • Inżynierowie Danych
      • Cloud & DevOps Engineers
      • Inżynierowie QA
    • AI Services
      • Inżynieria wspomagana przez AI
      • AI Solutions & Integration
      • AI Product Prototyping
    • Rozwój produktu
  • Branże
    • Fintech i bankowość
    • E-commerce
    • Adtech
    • Healthtech
    • Produkcja
    • Logistyka
    • Motoryzacja
    • IOT
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
  • O nas
  • Nasze Usługi
    • Zespoły IT
      • Inżynierowie Frontend
      • Inżynierowie Backend
      • Inżynierowie Danych
      • Cloud & DevOps Engineers
      • Inżynierowie QA
    • AI Services
      • Inżynieria wspomagana przez AI
      • AI Solutions & Integration
      • AI Product Prototyping
    • Rozwój produktu
  • Branże
    • Fintech i bankowość
    • E-commerce
    • Adtech
    • Healthtech
    • Produkcja
    • Logistyka
    • Motoryzacja
    • IOT
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
Strzałka w tył WSTECZ
2022-07-12
Software Development

Hash: Używać czy nie używać

The Codest

Krzysztof Buszewicz

Senior Software Engineer

Przeczytaj artykuł naszego eksperta Ruby i dowiedz się, dlaczego nie musisz zawsze używać tego hasha.

Wprowadzenie

Kiedy chcemy zagregować jakieś rzeczy, bardzo często używamy #each_with_object lub rozszerzyć regularne pętla przy użyciu #with_object. Ale w większości przypadków Ruby deweloperzy używają zwykłego hasha jako agregatora i być może jest to w porządku, ale w tym artykule chciałbym pokazać, że nie zawsze musi to być hash.

Przypadek

Zakładamy, że wszystkie pliki są umieszczone w jednym katalogu (ludzie).

Załóżmy, że mamy następujące dane people/people.csv file:

 Imię, Nazwisko, Wiek
 John,Doe,24
 Jane,Dee,45
 Josh,Bee,55
 Andrea,Boya,34
 Andrew,Moore,54

Chcemy znaleźć sumę wierszy i średni wiek - możemy napisać następujący skrypt:

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
end

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

puts "Łącznie: #{łącznie}"
puts "Średni wiek: #{średni_wiek}"

I tak, robi to, ale czytanie takiego kod to wątpliwa przyjemność. To zbyt niski poziom. Możemy to poprawić, dostarczając dedykowany agregator dla pętla.

people/age_aggregator.rb

class AgeAggregator
attrreader :total, :totalage

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

Wtedy nasza pętla wyglądałaby jak poniżej:

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 "Łącznie: #{aggregated.total}"
puts "Średni wiek: #{aggregated.average_age}"

Myślę, że jest to o wiele jaśniejsze.

Podsumowanie

Napisaliśmy więcej kodu, ale nasze szczegóły niższego poziomu zostały wyodrębnione do osobnej klasy. Teraz główny skrypt czyta się znacznie lepiej.

Oczywiście można argumentować, że przykład jest zbyt prosty, aby wkładać tyle wysiłku w refaktoryzację, ale daj spokój - to tylko przykład ;). Gdyby trzeba było zagregować więcej daneTakie obiekty agregujące są naprawdę dobrym rozwiązaniem.

baner współpracy

Czytaj więcej:

Plusy i minusy tworzenia oprogramowania w Ruby

Szyny i inne środki transportu

Rails Development z TMUX, Vim, Fzf + Ripgrep

Powiązane artykuły

Software Development

5 przykładów najlepszego wykorzystania Rubiego

Czy kiedykolwiek zastanawiałeś się, co możemy zrobić z Ruby? Cóż, niebo jest prawdopodobnie granicą, ale chętnie porozmawiamy o kilku mniej lub bardziej znanych przypadkach...

The Codest
Paweł Muszyński Software Engineer
Software Development

Zatrudnianie programistów wewnętrznych vs. zewnętrznych

Zatrudniać wewnętrznie czy zewnętrznie? To ostateczny dylemat! Poznaj zalety outsourcing lub budowania zespołu wewnętrznego w poniższym artykule.

The Codest
Grzegorz Rozmus Java Unit Leader
Software Development

Historia sukcesu The Codest: Od programisty Ruby do lidera Masterclass

Poznaj Tomasza Szkaradka - Head of People Operations w The Codest. Poznaj drogę zawodową Tomka od Ruby Managera do członka głównej grupy. Jak udało mu się...

The Codest
Tomasz Szkaradek Architekt rozwoju
Software Development

Więcej informacji o Ruby on Rails z Pub/Sub

Pub/Sub może przynieść wiele korzyści dla projektu - może sprawić, że kod będzie czysty, oddzielić usługi i uczynić je łatwo skalowalnymi. Dowiedz się więcej o Pub/Sub w poniższym artykule...

The Codest
Michał Pawlak Starszy programista Ruby

Subskrybuj naszą bazę wiedzy i bądź na bieżąco!

    O nas

    The Codest – międzynarodowa firma programistyczna.

    Wielka Brytania - siedziba główna

    • Office 303B, 182-184 High Street North E6 2JA

      Londyn, Anglia

    Polska – Partnerzy centrów technologicznych

    • Fabryczna Office Park, Aleja

      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska

      11, 02-673 Warszawa, Polska

    The Codest

    • Strona główna
    • Nasze Usługi
    • Branże
    • Nasz zespół
    • Studia przypadków
    • Nasze Know How
    • Słownik

    Nasze Usługi

    • Zespoły IT
      • Inżynierowie Frontend
      • Inżynierowie Backend
      • Inżynierowie Danych
      • Cloud & DevOps Engineers
      • Inżynierowie QA
    • AI Services
      • Inżynieria wspomagana przez AI
      • AI Solutions & Integration
      • AI Product Prototyping
    • Rozwój produktu

    Raporty

    • Fakty i mity na temat współpracy z zewnętrznym partnerem programistycznym
    • Z USA do Europy: Dlaczego amerykańskie startupy decydują się na relokację do Europy?
    • Porównanie centrów rozwoju Tech Offshore: Tech Offshore Europa (Polska), ASEAN (Filipiny), Eurazja (Turcja)
    • Jakie są największe wyzwania CTO i CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Warunki korzystania z witryny

    Copyright © 2026 by The Codest. Wszelkie prawa zastrzeżone.

    pl_PLPolish
    en_USEnglish pl_PLPolish