Rubyの5つの活用例
Rubyで何ができるのだろうと思ったことはないだろうか。まあ、可能性は無限大でしょうが、多少なりとも知られている事例についてお話しできれば幸いです。
Rubyのエキスパートによる記事を読んで、これらのハッシュを常に使用する必要がない理由を学びましょう。
あるものを集計したいとき、私たちはよく 1TP63オブジェクトを使って教える
または通常の ループ 使用して #オブジェクト付き
.しかし、ほとんどの場合 Ruby開発者 しかしこの記事では、必ずしもハッシュである必要はないことを紹介したい。
ここでは、すべてのファイルが1つのディレクトリ(人々
).
例えば、次のような場合だ。 人々/人々.csv
file:
名,姓,年齢
ジョン,ドウ,24
ジェーン,ディー,45
ジョシュ,ビー,55
アンドレア,ボヤ,34
アンドリュー,ムーア,54
行の合計と平均年齢を求めるには、次のようなスクリプトを書けばよい:
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
終了
total = aggregated[:total]
平均年齢 = 集計[:totalage].to_f / total
puts "合計: #{total}"
puts "平均年齢: #{average_age}"
そして、それはその通りなのだが、そのようなものを読むのは コード は疑わしい喜びだ。レベルが低すぎるように感じる。の専用アグリゲーターを用意すれば改善できる。 ループ.
people/age_aggregator.rb
クラス AgeAggregator
attrreader :total, :totalage
def initialize
合計 = 0
トータルエイジ = 0
終了
def increment!
合計 += 1
終了
def incrementage!(age)
総計 += 年齢
end
def averageage
totalage.to_f / total
end
終了
ループは以下のようになる:
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['年齢'].to_i)
終了
puts "合計: #{aggregated.total}"
puts "平均年齢: #{aggregated.average_age}" "
より明確になったと思う。
私たちはより多くのコードを書いたが、低レベルの詳細は別のクラスに抽出されている。これで、メインのスクリプトはずっと読みやすくなった。
もちろん、リファクタリングに労力を費やすには、この例はシンプルすぎるという意見もあるだろうが、それは単なる例だ。)より多くのデータを集約する必要があるのなら、このようなアグリゲーター・オブジェクトが本当に助けになる。
続きを読む