RubyでJavaで言うところの流れるようなインターフェースまがいクラスを実装してみる

Java界隈ではよく流れるようなインターフェースがどうとかいうけど、Rubyでも同じようなことができる。ということで、ずっとJavaのネタばかり書いてきたので今回はRubyネタで行きます。

実装方法は簡単です。

class CalcClass
  def initialize(number = 0)
    @value = number;
  end

  def plus(number)
    @value = @value + number;
    self;
  end

  def minus(number)
    @value = @value - number
    self;
  end

  def multiply(number)
    @value = @value * number;
    self
  end

  def divide(number)
    @value = @value / number;
    self;
  end

  def display()
    puts @value;
    self;
  end
end
obj = CalcClass.new(10);
obj.plus(10).divide(2).multiply(3).minus(3).display();

ポイントはすべてのメソッドでselfを最後にリターンしていることです。

これはJavaで言うところのthisと同じようなもので、最初のobjがレシーバとなり、Rubyでは呼び出されたメソッドがレシーバオブジェクトの参照を保持しています。つまりその参照であるselfを返せば同じような記述が可能ということになります。

プログラムの結果はコンソールに27と表示されて終わる簡単なプログラムです。

まあ、それだけなんですが・・・。