さぁ、rubyだ。

ついに、ついに、rubyでプログラミングを始めました(もたもたしてたなぁ > 自分)。なんとなく(作業的に)区切りが良かったのに加え、下記が背中を押してくれました。

今のところ印象深いのは、

while gets
  puts [4,3,2,1,0].collect{|c| $_.chomp.split("\t")[c]}.join("\t")
end

という感じのコードを「無理にワンライナー化しようとしなくても」書きそうになってしまうところかな。それにしてもこのコード、どのくらいの計算量(オーダー)がかかるんだろ。関数型言語ちっくなだけに、インタプリタ内部での評価順序を知らないと、効率が悪いのかどうか、わからんなぁ。
とはいえ、書いている側としては小気味よいですね。「指示はきちんと出してやったぞ。さ、評価してくれたまへ」みたいな。エスカレートして、富豪さバクハツのコードを書いてしまいそうです。データ量の多いときは、ちゃっちゃとDBMSに任せるしくみを考える、というスタンスが思想的にはマッチするんでしょうね。

(11/6追記)(同日、追々記)
なかださんのコメントに刺激されて(「そうか、reverseか!」)、もう一度Arrayのリファレンスを見直してみました。

http://www.ruby-lang.org/ja/man/?cmd=view;name=Array
http://ruby-doc.org/core/classes/Array.html 

どうも僕が、今後よく行うであろう作業にはvalues_atを使うのがよさげです。

while gets
  puts $_.chomp.split("\t").values_at(4,3,2,1,0).join("\t")
end

これで、ldasからgffへもカンタン (ライブラリが必要にならないぐらい :-)

そんでもって、評価順序に関する記述についても探してみました。

「実行」の「メソッドの呼び出し」節
http://www.ruby-lang.org/ja/man/?cmd=view;name=%BC%C2%B9%D4

「引数式を左から右の順番で評価」ということなので、直感的には「プログラムを読んだとおりに評価」と考えてよいのでしょう。