RubyではForwardableモジュールを使うことで、オブジェクトのメソッドを別のオブジェクトに委譲することが簡単にできます。これにより、ラッパークラスなどでメソッドを個別に定義せずに済むので、コードがスッキリします。
Forwardableの基本的な使い方
まず、Forwardableをrequireして、クラス内でextend Forwardableまたはinclude Forwardableを使います。
require 'forwardable'
class Wrapper
extend Forwardable
def initialize(array)
@array = array
end
# arrayのメソッドを委譲
def_delegators :@array, :push, :pop, :size
end
w = Wrapper.new([])
w.push(10)
w.push(20)
puts w.size # => 2
puts w.pop # => 20
委譲の利点
この方法の利点は、内部オブジェクトのメソッドをラッパーにそのまま反映できる点です。ラッパークラスを作りつつ、元のオブジェクトの便利なメソッドを簡単に使えるようになります。
注意点
メソッド名の衝突に注意する必要があります。委譲先のオブジェクトのメソッドと、ラッパークラスで独自に定義したメソッド名が重複すると意図しない挙動になることがあります。
まとめ
RubyのForwardableを使うことで、複数のメソッドを簡潔に委譲できます。ラッパークラスやデコレーターパターンの実装を簡単にするので、可読性と保守性が向上します。

コメント