或るプログラマの開発日記

日々の勉強したことの備忘録なんかに使っていきます

DATA変数と__END__トークンがテストに便利

今回は、ちょっとしたRubyプログラムのテストに便利なDATA変数の使い方のメモです。

DATA変数とは

Rubyプログラムファイルに__END__トークンだけの行が含まれている場合、その次の行以降にアクセスする為のストリームとしてDATA変数が定義されます。

この機能を使うと、paizaやCodeIQの課題なんかでよくある複数行の標準入力データを処理するプログラムを作る際に非常に便利だったりします。

__END__トークン以降に、テストしたいデータを貼り付けておけば、いちいち実行してからコンソールにデータを貼り付けるなんて面倒な事せずに済みますから!

使い方

というわけで、複数行の入力データを元にHashを作るという簡単な実装例を作ってみました。

プログラム

$_input = DATA #標準入力に切り替える場合、STDINに変更する
h = {}
while line = $_input.gets do
  (k, n) = line.split(" ")
  h.store(k, n)
end
p h
__END__
1 apple
2 orange
3 lemon
4 banana

実行結果

{"1"=>"apple", "2"=>"orange", "3"=>"lemon", "4"=>"banana"}

雑感

よくよく調べて見ると、RubyだけでなくPerlでも似たような使い方が出来るようですね。Perlは昔業務で少し触ったことがあるが、全然知らんかったわい。。(- -;)
無知というのは恐ろしいもんじゃ。。