window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster już istnieje') } 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: Używać czy nie używać - The Codest
The Codest
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Branże
    • Fintech i bankowość
    • E-commerce
    • Adtech
    • Healthtech
    • Produkcja
    • Logistyka
    • Motoryzacja
    • IOT
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • 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 Programiści Ruby 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 c'mon - to tylko przykład ;). Gdybyś potrzebował zagregować więcej danych, takie obiekty agregujące są naprawdę ratunkiem.

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

Fintech

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 z centrami technologicznymi w Polsce.

    Wielka Brytania - siedziba główna

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

    Polska - lokalne centra technologiczne

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

      The Codest

    • Strona główna
    • O nas
    • Nasze Usługi
    • Case Studies
    • Nasze Know How
    • Kariera
    • Słownik

      Nasze Usługi

    • Konsultacje IT
    • Software Development
    • Backend Development
    • Frontend Development
    • Zespoły IT
    • Backend Dev
    • Inżynierowie rozwiązań chmurowych
    • Inżynierowie danych
    • Inne
    • Inżynierowie QA

      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 © 2025 by The Codest. Wszelkie prawa zastrzeżone.

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