2002-12-18 (Wed) ドリアは牛乳ごはん?

Scarab: scarab-ja commit mail 配信

Scarab-ja で commit mail が配信できるように設定してみた。

scarab-ja-cvs

SourceForge.jp は結構いろいろできるんだね。

Amazon Web Service API 所感 (2)

やっぱり SOAP じゃなくて Accessing Amazon.com Data via XML over HTTP を使って net/http + REXML で軽いクライアントを作ったほうがいいかもしれないね。

猫熊は燃えつきた?!日記

燃猫熊さんの日記。公開してもよいみたいなのでリンク。

emacs-w3m の裏情報や Mew への熱き想いなどが載る(かも)。

本日のツッコミ(全2件) [ツッコミを入れる]

# くり [(あしあと)]

# ko [ハッ?!]


2003-12-18 (Thu)

食あたりっぽい

突然の悪寒>高熱>間接の痛みで、どうにもならなくなり午後半休。きゅう。

忘年会で食べたタラかなぁ。


2008-12-18 (Thu)

Re: はじめてのSwing on JRubyその弐

id:xibbarさんのところでJRubyチュートリアルっぽいことをしているので便乗してみます。

最後のSimpleGui1Bクラスは次のように書くと多少Rubyっぽく見えるかもしれません。

require 'java'
import javax.swing.JFrame
import javax.swing.JButton

class SimpleGui1B
  def initialize
    frame = JFrame.new
    button = JButton.new("click me")
    frame.default_close_operation = JFrame::EXIT_ON_CLOSE
    frame.content_pane.add(button)
    frame.setSize(300,300)
    frame.visible = true
    button.add_action_listener java.awt.event.ActionListener.impl { |method, e|
      e.source.text = "I've been clicked!"
    }
  end
end

SimpleGui1B.new

JRubyの場合、Javaインターフェースを直接実装したクラスを作らなくてもRubyのブロックを渡して実装クラスとすることができます。この場合、第1ブロック引数にはメソッド名が文字列で渡されます*1。第2のブロック引数にはイベント発生時に渡される情報(この場合java.awt.event.ActionListenerを実装したインスタンス)が渡されます。

Swingのイベントハンドラのようにメソッドがひとつしかない単純なインターフェースを持ったクラスがたくさん必要なプログラミングでは特に、Rubyの強力なブロック渡しを活用することで簡潔に書けますね。

またブロックはコンテキストを保持するため@buttonをインスタンス変数にする必要が無くなるのもポイントでしょうか。

追記12/19: @tom_eneboからインターフェースのimplメソッドは使わなくてよいと教えてもらったので、その場合のソースも書いておきます。より短くなりました。

require 'java'
import javax.swing.JFrame
import javax.swing.JButton

class SimpleGui1B
  def initialize
    frame = JFrame.new
    button = JButton.new("click me")
    frame.default_close_operation = JFrame::EXIT_ON_CLOSE
    frame.content_pane.add(button)
    frame.setSize(300,300)
    frame.visible = true
    button.add_action_listener { |e|
      e.source.text = "I've been clicked!"
    }
  end
end

SimpleGui1B.new

Tags: JRuby

*1 メソッド名をキーに処理をディスパッチするのに使えます。

本日のツッコミ(全1件) [ツッコミを入れる]

# xibbar [なかなかRuby的に書ける部分がわかんなかったりして、 それがハードルだったりしますよね。 JRubyの本無いのかし..]