拡張メソッド

利点

  • クラス提供者ではなく利用者が、クラスを後から拡張できる
  • Mix-inとはまた違う、クラス横断型のクラス拡張方法 (としても使える)
  • パイプ&フィルタ(例:LINQ)がネストした関数呼び出しから、左から右へと続く一連の関数の羅列になり、いかにもパイプらしく見える

欠点

  • 濫用は間違いなく混乱の元
  • どのメソッドが呼ばれるのか複雑になる
  • バージョン管理の問題も出てくる

C#3.0は関数型のエッセンスを取り入れたとよく言われるけど、むしろLL方向に近づいていると思います、ハイ。RubyC#3.0はとても似ていると思います。LL方面の人がC#3.0を見れば違和感は感じないかもしれないけど、JavaC#2.0方面の人が見ればこんなのありかよっと感じる人が多そう、とか最近考えていたり。

Rubyでやってみる

class String
  def hello
    print "Hello ", self, "\n"
  end
end

"C#3.0".hello

Stringクラスにhelloメソッドを追加。結果は「Hello C#3.0」。

LLに近づいてるよね、やっぱり。