コードの重複を排除する、ということは良いコードを書くための指針として昔から言われている。全く同じ構造のコードを1000行にわたって繰り返すことがばかげていることは誰にだってわかる。ruby はそのようなコードの重複を排除することに優れた言語だと思う。メタプログラミングを工夫することでかなり重複を排除することができる。 例えば def opened? self.state == "opened" end def closed? self.state == "closed" end def waiting? self.state == "waiting" end のようなコードもメタプログラミングを使えば %w(opened closed waiting).each do |name| define_method "#{name}?" do self.state.to_s == name en