Rubyをクリスマスデコレーションしよう!

今日はクリスマス。巷はクリスマスイルミネーションで溢れかえっていることでしょう。街を様々に彩るイルミネーションの瞬きを見ていると思いませんか?この聖夜、私たちの愛するRubyもデコレーションしたいと!

ということでやってみました。

class Klass
  @{ReturnType(Symbol)}
  @{ParamTypes(:to_sym)}
  def do_something(arg)
    :"Hello, #{arg.to_sym}"
  end 
end
puts Klass.new.do_something("annotation")
$ ./ruby annotation.rb
Hello, annotation

Rubyをデコレーション。そうデコレータです。

do_somethingメソッドがReturnTypeとParamTypesによって鮮やかに彩られています。もちろんデコレータはただの飾りではありません。試しに引数を"1"に変えてみましょう。

puts Klass.new.do_something(1)
$ ./ruby annotation.rb
(eval):2:in `do_something_with_paramtypes': No Method: to_sym (Annotations::AnnotationTypeError)
        from (eval):2:in `do_something_with_returntype'
        from annotation.rb:3:in `<main>'

懸命な皆さんならお分かりの通り、ParamTypesは引数の型をチェックするデコレータです。

長期のブランクによるRuby力の低下が著しいためエラーメッセージ中のメソッド名がなんか変わってますが、一応「パラメータがto_symメソッドを持っていない」という例外が投げ返されました。同様にReturnTypeも、デコレータの都合上実行時チェックとなりますが、正しく型チェックしてくれます。

Rubyは「直感的に書ける」などと、まるで我々Rubyプログラマが何も考えずにプログラムをしているかのような表現で揶揄されることも多い言語ですが、本パッチを使用することで独自のデコレータを定義して、自在に直感にブレーキを掛けることができます。

2012年はぜひともメソッドを@{ParamTypes(...)}、@{ReturnType(..)}、@{Deprecated()}、@{Override()}、@{SuppressWarnings()}などのデコレータで飾り付け、Rubyプログラマの知性、ひいては日本の知性を世界にアピールしましょう!