5 exemplos da melhor utilização do Ruby
Já alguma vez pensou no que podemos fazer com Ruby? Bem, o céu é provavelmente o limite, mas temos todo o gosto em falar sobre alguns casos mais ou menos conhecidos...
Leia um artigo do nosso especialista em Ruby e saiba porque é que não precisa de usar sempre o seu hash.
Quando queremos agregar algumas coisas, é muito frequente utilizarmos 1TP69Ensinar_com_objecto ou alargar o período normal de laço utilizando #com_objecto. Mas na maioria dos casos Rubi criadores estão a utilizar um hash simples como agregador e talvez não haja problema, mas neste artigo gostaria de mostrar que nem sempre tem de ser um hash.
Assumimos que todos os ficheiros são colocados num diretório (pessoas).
Digamos que temos o seguinte pessoas/pessoas.csv file:
Nome, Apelido, Idade
John,Doe,24
Jane,Dee,45
Josh,Bee,55
Andrea,Boya,34
Andrew,Moore,54
Queremos encontrar o total de linhas e a idade média - poderíamos escrever o seguinte script:
pessoas/parser.rb
requerer 'csv'
aggregated = CSV.foreach('people.csv', headers: true)
.withobject({ total: 0, totalage: 0 }) do |row, agg|
agg[:total] += 1
agg[:totalage] += row['Age'].toi
fim
total = aggregated[:total]
averageage = aggregated[:totalage].to_f / total
coloca "Total: #{total}"
puts "Idade média: #{idade média}"
E sim, faz a coisa, mas ler uma código é um prazer duvidoso. Parece um nível demasiado baixo. Podemos melhorá-lo fornecendo um agregador dedicado para o laço.
people/age_aggregator.rb
classe AgeAggregator
attrreader :total, :totalage
def initialize
@total = 0
@total_idade = 0
fim
def incrementar!
@total += 1
fim
def incrementage!(idade)
@totalage += idade
fim
def averageage
totalage.to_f / total
fim
fim
E então o nosso loop ficaria como abaixo:
pessoas/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)
fim
puts "Total: #{agregado.total}"
puts "Idade média: #{agregado.idade_média}"
Penso que é muito mais claro.
Escrevemos mais código, mas os nossos detalhes de nível inferior são extraídos para a classe separada. Agora o guião principal lê-se muito melhor.
É claro que se pode argumentar que o exemplo é demasiado simples para se fazer tanto esforço na refacção, mas vá lá - é apenas um exemplo ;). Se tiver de agregar mais dados, estes objectos agregadores são realmente a melhor solução.

Ler mais:
Prós e contras do desenvolvimento de software Ruby