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に別構文があってもいいじゃないか!



blog comments powered by Disqus
ruby_pack8

100円〜で好評発売中!
M'ELBORNE BOOKS