オープン性

訳あって、4つの値を一度に取ってくるメソッドが欲しいなぁ、と思った時に、RubyだとClassのオープン性を使って、いとも簡単に実現できちゃう。

class Array
  def each4()
    i = 0
    while i < self.size
      yield self[i..i+3]
      i += 4
    end
  end  
end 

すご〜く便利なんだけど、すご〜く怖さを感じる。

他の言語でこのようなことをしようとすると、Arrayクラスを継承したMyArrayクラスを作ってやって、そこに独自のメソッドを追加することになると思うが、この場合だと、他の人がソースを見た時に、『これはカスタマイズしたクラスだなぁ』とすぐわかる。

それに対して、既存クラスにアタッチできてしまうと、このメソッドがオリジナルのものなのか、それともカスタマイズしたものなのか、判別がつかなくなってしまう気がする。

オープン性と言うのは、Rubyの柔軟性の一つとして、すごい武器なんだろうけど、使い方を誤るともろに自分に帰ってくる諸刃の剣って感じですね*1

いちユーザとしては、危険性を承知した上で使わないとダメですね。
ぼくみたいな素人がこの辺のブラックな領域に足を突っ込まない方がいいような気もするのですが、ついつい興味本位で踏み込んでしまいます^^;

*1:Railsはオープン性をフルに生かして、記述されてるとか