2011/01/21

Rubyの「__END__」がすごく便利

Ruby技術者認定試験公式ガイド輪読会の中で@niku_nameさんに教えてもらって、凄く便利に活用しているので、メモ。Rubyistの皆さんには当然のことなんでしょうけど、僕にとっては新発見でした。

Rubyには「__END__」という、スクリプトの終わりを定義する文字列があります。「__END__」のみで構成された行(前後に空白が入ると認識されません)があると、そこでスクリプトが終わります。

ですので、
str = "ABC"
puts str

__END__
str.split(//).each do |s|
  puts s
end

=>
ABC
という感じにすると、最後のeachは実行されません。これ、スクリプトの途中までだけをデバッグする為に動かしたいときとか、凄く便利。

__END__以下のデータにアクセスしたい場合はDATAという定数を使います。ファイルオブジェクトのように操作が出来ます。
str = "ABC"
puts str
puts DATA.read

__END__
str.split(//).each do |s|
  puts s
end

=>
ABC
str.split(//).each do |s|
  puts s
end
面白い!今まではただ試行錯誤を繰り返しながらスクリプトを書いてたけど、Ruby技術者認定試験公式ガイド輪読会を始めてから、本当にベーシックな知識を知ることが多くて、すごく楽しいです。