リファクタリング(1)

2008/12/15

次のように定義されたクラス Bird, Crow, Duck がある。

require 'digest/md5'

class Bird
  attr_accessor :name

  private
  def digest(food)
    d = Digest::MD5.new
    d << food
    d << name
    d.hexdigest
  end
end

class Crow < Bird
  def eat(food)
    if food.kind_of?(String) && food.match(/^edible:/)
      digest(food.reverse)
    else
      food
    end
  end
end

class Duck < Bird
  def eat(food)
    if food.kind_of?(String) && food.match(/^edible:/)
      digest(food.upcase)
    else
      food
    end
  end
end

CrowDuckeat メソッドはほとんど同じである。

2つの eat メソッド間の冗長性ができる限り少なくなるように、ソースコードを書き換えなさい。

--

黒田努


解答と解説の表示・非表示