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 existe déjà') } 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 : À utiliser ou à ne pas utiliser - The Codest
The Codest
  • A propos de nous
  • Services
    • Développement de logiciels
      • Développement frontal
      • Développement backend
    • Staff Augmentation
      • Développeurs frontaux
      • Développeurs backend
      • Ingénieurs des données
      • Ingénieurs en informatique dématérialisée
      • Ingénieurs AQ
      • Autres
    • Conseil consultatif
      • Audit et conseil
  • Industries
    • Fintech et banque
    • E-commerce
    • Adtech
    • Santé (Healthtech)
    • Fabrication
    • Logistique
    • Automobile
    • IOT
  • Valeur pour
    • CEO
    • CTO
    • Gestionnaire des livraisons
  • Notre équipe
  • Études de cas
  • Savoir comment
    • Blog
    • Rencontres
    • Webinaires
    • Ressources
Carrières Prendre contact
  • A propos de nous
  • Services
    • Développement de logiciels
      • Développement frontal
      • Développement backend
    • Staff Augmentation
      • Développeurs frontaux
      • Développeurs backend
      • Ingénieurs des données
      • Ingénieurs en informatique dématérialisée
      • Ingénieurs AQ
      • Autres
    • Conseil consultatif
      • Audit et conseil
  • Valeur pour
    • CEO
    • CTO
    • Gestionnaire des livraisons
  • Notre équipe
  • Études de cas
  • Savoir comment
    • Blog
    • Rencontres
    • Webinaires
    • Ressources
Carrières Prendre contact
Flèche arrière RETOUR
2022-07-12
Développement de logiciels

Hash : À utiliser ou à ne pas utiliser

The Codest

Krzysztof Buszewicz

Senior Software Engineer

Lisez un article de notre expert Ruby et apprenez pourquoi vous n'avez pas besoin de toujours utiliser votre hash.

Introduction

Lorsque nous voulons agréger certaines choses, nous utilisons très souvent 1TP61Enseigner avec un objet ou de prolonger la durée régulière de la boucle en utilisant #avec_objet. Mais dans la plupart des cas Développeurs Ruby utilisent un simple hash comme agrégateur et c'est peut-être bien, mais dans cet article, j'aimerais vous montrer qu'il n'est pas toujours nécessaire d'utiliser un hash.

Cas

Nous supposons que tous les fichiers sont placés dans un seul répertoire (les personnes).

Supposons que nous ayons les éléments suivants personnes/people.csv file:

 Prénom, Nom, Âge
 John,Doe,24
 Jane, Dee, 45 ans
 Josh, Bee, 55 ans
 Andrea, Boya, 34 ans
 Andrew,Moore,54

Nous voulons trouver le nombre total de lignes et l'âge moyen - nous pourrions écrire le script suivant :

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 = agrégé[:total]
averageage = aggregated[:totalage].to_f / total

puts "Total : #{total}"
puts "Âge moyen : #{moyen_âge}"

Et oui, il le fait, mais la lecture d'une telle code est un plaisir douteux. On a l'impression d'être à un niveau trop bas. Nous pouvons l'améliorer en fournissant un agrégateur dédié pour les boucle.

people/age_aggregator.rb

classe AgeAggregator
attrreader :total, :totalage

def initialize
@total = 0
@total_age = 0
fin

def increment !
@total += 1
end

def incrementage !(age)
@totalage += age
end

def averageage
totalage.to_f / total
end
end

Notre boucle se présente alors comme suit :

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 "Total : #{aggregated.total}"
puts "Âge moyen : #{aggregated.average_age}"

Je pense que c'est beaucoup plus clair.

Résumé

Nous avons écrit plus de code, mais nos détails de bas niveau sont extraits dans une classe distincte. Le script principal se lit désormais beaucoup mieux.

Bien sûr, vous pouvez argumenter que l'exemple est trop simple pour mettre autant d'effort dans le refactoring, mais allez, ce n'est qu'un exemple ;). Si vous deviez agréger plus de données, de tels objets agrégateurs sont vraiment la solution.

bannière de coopération

En savoir plus :

Avantages et inconvénients du développement de logiciels en Rubis

Rails et autres moyens de transport

Développement Rails avec TMUX, Vim, Fzf + Ripgrep

Articles connexes

Fintech

5 exemples de la meilleure utilisation de Ruby

Vous êtes-vous déjà demandé ce que l'on pouvait faire avec Ruby ? Eh bien, le ciel est probablement la limite, mais nous sommes heureux de parler de quelques cas plus ou moins connus...

The Codest
Pawel Muszynski Software Engineer
Développement de logiciels

Embaucher des développeurs internes ou externes

Recruter en interne ou en externe ? C'est le dilemme ultime ! Découvrez les avantages de outsourcing ou de la constitution d'une équipe interne dans l'article suivant.

The Codest
Grzegorz Rozmus Chef d'unité Java
Développement de logiciels

L'histoire de la réussite de The Codest : De Ruby Dev à Masterclass Leader

Rencontrez Tomasz Szkaradek - Responsable des opérations humaines chez The Codest. Découvrez le parcours de Tomek, qui est passé du statut de Ruby Manager à celui de membre du groupe principal. Comment a-t-il réussi...

The Codest
Tomasz Szkaradek Architecte de développement
Développement de logiciels

En savoir plus sur Ruby on Rails avec Pub/Sub

Pub/Sub peut apporter de nombreux avantages au projet - il peut rendre le code propre, découpler les services et les rendre facilement évolutifs. Pour en savoir plus sur Pub/Sub, consultez l'article suivant...

The Codest
Michal Pawlak Développeur Ruby senior

Abonnez-vous à notre base de connaissances et restez au courant de l'expertise du secteur des technologies de l'information.

    A propos de nous

    The Codest - Entreprise internationale de développement de logiciels avec des centres technologiques en Pologne.

    Royaume-Uni - Siège

    • Bureau 303B, 182-184 High Street North E6 2JA
      Londres, Angleterre

    Pologne - Les pôles technologiques locaux

    • Parc de bureaux Fabryczna, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Varsovie, Pologne

      The Codest

    • Accueil
    • A propos de nous
    • Services
    • Études de cas
    • Savoir comment
    • Carrières
    • Dictionnaire

      Services

    • Conseil consultatif
    • Développement de logiciels
    • Développement backend
    • Développement frontal
    • Staff Augmentation
    • Développeurs backend
    • Ingénieurs en informatique dématérialisée
    • Ingénieurs des données
    • Autres
    • Ingénieurs AQ

      Ressources

    • Faits et mythes concernant la coopération avec un partenaire externe de développement de logiciels
    • Des États-Unis à l'Europe : Pourquoi les startups américaines décident-elles de se délocaliser en Europe ?
    • Comparaison des pôles de développement Tech Offshore : Tech Offshore Europe (Pologne), ASEAN (Philippines), Eurasie (Turquie)
    • Quels sont les principaux défis des CTO et des DSI ?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Conditions d'utilisation du site web

    Copyright © 2025 par The Codest. Tous droits réservés.

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