Ruby1.9でもEND HELLを解消したい!

RubyKaigi2011において
現行Rubyの構文上の欠点である
END HELLを解消するEnd Ruby
あんどうやすし氏(id:technohippy)により提唱されました


parse.yの歩き方


END HELLとは要するに以下のような
醜いendの連なりのことです

module MyModule
  class MyClass
    def my_method
      10.times do
        if rand < 0.5
          p :small
        else
          p :large
        end
      end 
    end      <- ここ
  end
end


氏はLispのcddddrに倣って
Rubyへのennnnndキーワードの導入を提唱します
ennnnndを使えば先のコードは次のように書けます

module MyModule
  class MyClass
    def my_method
      10.times do
        if rand < 0.5
          p :small
        else
          p :large
        ennnnnd

変態ですね!


Rubyコミッターらによる実装も完了したようなので
Ruby2.0で正式採用となるのも間違いなさそうです..


http://d.hatena.ne.jp/ku-ma-me/20110718/p1


そこで気がはやい人のために
Ruby1.9でもennnnndを可能とする
ennndライブラリを作りました:)


以下のように使います
まずはあなたのコードを用意します

# mycode.rb
module MyModule
  class MyClass
    def my_method
      10.times do
        if rand < 0.5
          p :small
        else
          p :large
        ennnnnd


ennndライブラリとあなたのコードをrequireして
実行する実行コードを用意します

#req.rb 
require './ennnd'
require 'mycode'

MyModule::MyClass.new.my_method

つまりennndキーワードを含むあなたのコードを
ライブラリとして読み込みます


これを現行Rubyで実行します

% ruby req.rb 
:small
:small
:large
:small
:small
:large
:small
:large
:small
:small


やっぱりRubyは楽しいですね!


関連記事:Sinatraに別構文があってもいいじゃないか!