19 July 2011
Ruby1.9でもEND HELLを解消したい!
RubyKaigi2011において現行Rubyの構文上の欠点である、END HELLを解消するEnd Rubyがあんどうやすし氏(id:technohippy)により提唱されました。
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は楽しいですね!
blog comments powered by Disqus