Ruby On Rails

Ruby On Rails (RoR) にちょっと時間をとってつきあってみました。実用的な観点から使い倒すことも期待しているのと、

  • ruby / Object orientedな思想のお手本
  • MVCモデルのお手本 (たいがいの本では、javaで解説してあるので、今までとっつきづらかった)

という興味もあったりします。
数少ないけど、日本語情報源としては

[Ruby on RailsWiki ですよ]
http://wiki.fdiary.net/rails/

[RubyOnRails を使ってみる@るびま]
http://jp.rubyist.net/magazine/?cmd=view&p=0004-RubyOnRails&key=ruby%2Bon%2Brails
http://jp.rubyist.net/magazine/?cmd=view&p=0005-RubyOnRails&key=ruby%2Bon%2Brails
http://jp.rubyist.net/magazine/?cmd=view&p=0006-RubyOnRails&key=ruby%2Bon%2Brails
http://jp.rubyist.net/magazine/?cmd=view&p=0008-RubyOnRails&key=ruby%2Bon%2Brails

[Ruby on RailsによるWebアプリケーションの高速開発@IBM developerWorks]
http://www-06.ibm.com/jp/developerworks/linux/050708/j_l-rubyrails.html

あたりがとっても役に立ってます。英語だけど欠かせないのは、本家のチュートリアル

http://wiki.rubyonrails.com/rails/pages/Tutorial

ちなみにO/R マッピングライブラリActiveRecordは、Railsと切り離しても使えるらしい

http://jp.rubyist.net/magazine/?0004-RLR
http://rubyforge.org/projects/activerecord/
http://www.rubyonrails.org/show/ActiveRecord

あと参考

[phprailsを比べた記事]
http://www.megginson.com/blogs/quoderat/archives/2005/06/11/rails-vs-php-mvc-or-view-centric/
ここでは「わかりやすさ」という意味でphpに軍配をあげてるみたい

[PerlRails?]
http://qootas.org/blog/archives/2005/03/perl_on_rails_c.html
http://www.drk7.jp/MT/archives/000925.html
http://www.drk7.jp/MT/archives/000933.html
http://search.cpan.org/~mramberg/Catalyst/
Perlではキツイのかもしれないけど、一応メモ。

さぁ、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

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