繰り返しを簡単に。

メガネ男子が近頃受けているらしいということで、プロフィールに愛用メガネの画像を載せてみた。だから何だ、この野郎。
それはそうと、Enumerableなるモジュールをインクルードすると繰り返しが簡単に行えるらしいということで試してみた。

#!/usr/bin/env ruby

class Product
  def initialize(pid, name)
    @pid = pid
    @name = name
  end
  attr_accessor:pid
  attr_accessor:name

  # この演算子を定義しておくと、sort、max、minメソッドが使える
  # sortなどはこの演算子を利用して実装しているため
  def <=>(product)
    return self.pid <=> product.pid
  end
end

class Products
  include Enumerable

  def initialize
    @products = Array.new
    @products << Product.new(1, 'あめ')
    @products << Product.new(3, '防災ずきん')
    @products << Product.new(2, 'バールのようなもの')
  end

  # このメソッドを定義すると、find、map、include?などが
  # 使えるようになる
  # mapなどはこのメソッドを利用して実装しているため
  def each
    @products.each do |product|
      yield(product)
    end
  end

end

products = Products.new

puts 'findする'
found_product = products.find { |product| product.pid == 2}
puts "pid:#{found_product.pid}, name:#{found_product.name}"

puts 'ソート前'
products.each do |product|
  puts "pid:#{product.pid}, name:#{product.name}"
end

puts 'ソート後'
products.sort.each do |product|
  puts "pid:#{product.pid}, name:#{product.name}"
end

結果。

findする
pid:2, name:バールのようなもの
ソート前
pid:1, name:あめ
pid:3, name:防災ずきん
pid:2, name:バールのようなもの
ソート後
pid:1, name:あめ
pid:2, name:バールのようなもの
pid:3, name:防災ずきん

簡単すぎてビックリ。

プログラミングRuby 第2版 言語編

プログラミングRuby 第2版 言語編