これ僕.com:行動分析学マニアがおくる行動戦略

意図と行動のギャップから生じる「不自由さ」への挑戦。果たして僕たちに自由はあるのか?

Rubyはユーザー指向?

3連休の間、Rubyで遊んでました。
Rubyの開発環境って何が定番か分からなかったので、
とりあえず前にInstallしたRadRailsを使ってました。
(途中でEclipseプラグインのRuby Development Toolsに変更)


よくスクリプト言語の良さとして、
「弄って即実行」みたいな話を聞きますが、
個人的に、その辺のメリットはあまり感じられず。
JavaでもEclipseでプログラム書いてる分には、
コンパイルやビルドを意識することが少ないので、
「弄って即実行」なんですよね。
まー、連休で書いてたプログラムは、
サーバーサイドなプログラムじゃないので、
サーバー停止→起動なんてプロセスが入ってくると、
スクリプト言語の恩恵が分かるのかもしれない。
(JavaでもSeasarのHot Deploy使えば無問題ですか)


で、それでも、「ああ、Rubyっていいな」と思ったことを。
例えば、テキストファイルに

Hello,
World!!

と書きたい場合。
Javaだと、

    PrintWriter writer = null;
    try {
        FileWriter fw = new FileWriter("hoge.txt");
        BufferedWriter bw = new BufferedWriter(fw);
        writer = new PrintWriter(bw);
        writer.println("Hello,");
        writer.println("World!!");
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        writer.close();
    }

こんな感じですかね。
で、これがRubyだと

  open('hoge.txt', 'w') do |f|
    f.puts('Hello,')
    f.puts('World!!')
  end

なんですよねぇ。
(この2つのコードがどの程度等価なのかは分かりませんが・・・)
やりたいことやるのに、「余計なこと」を書く量が少ない。
Javaでもラップクラスを作っちゃえば、
同じくらいのコーディング量で済むのかもしれないけど、
Rubyには標準で用意されてるんだな、と。
で、思ったのは、Javaはデザイン指向な感じで、
Rubyはユーザー(プログラマ)指向な感じだな、と。


(7/18追記)
WhiteRabbitさんにご指摘を受けたので、J2SE5.0を使用。
PrintWriterで直接ファイルを指定してみました。
ちょっと短くなったかな。

    PrintWriter writer = null;
    try {
        writer = new PrintWriter("hoge.txt");
        writer.println("Hello,");
        writer.println("World!!");
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        writer.close();
    }