Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

Rubyで流れるようなインターフェースをメタプログラミング

概要

流れるようなインターフェースをメタプログラミング

詳細

まつもとゆきひろさんの「コードの世界」でattr_accssorのソースコードを読んで
実装したくてしょうがなくなったので夜更かしして実装。
流れるようなインターフェースをメタプログラミングします。

※参考としてJavaの流れるようなインターフェース生成ツール
http://d.hatena.ne.jp/tbpg/20121006/1349539794

サンプルコード

# encoding: Windows-31J

class Module
  def fluent_accessor(*symbols)
    symbols.each do |symbol|
      class_eval %{
        def get#{symbol.capitalize}
          @#{symbol}
        end
        
        def #{symbol}(value)
          @#{symbol}=value
          self
        end
      }
    end
  end
end

class FluentDataClass
  fluent_accessor :hoge,:hige,:hage
end

fluent_data_class = FluentDataClass.new.hoge("hogeの値").hige("higeの値").hage("hageの値")
symbols = [:hoge,:hige,:hage]
symbols.each {|symbol|puts fluent_data_class.method("get#{symbol.capitalize}").call}

おまけ

Javaではせいぜい自動生成ツールを作成するのが手一杯だったが、
Rubyでは言語の基本機能を拡張して、元々存在する機能であるかのように使えるのが
強力だなと実感。Javaの仕事でこんなコードがかけたらどれだけ楽か。