JRuby覚書き2

前回書いたようにJRubyでは、importをJavaのようにアスタリスクを使って省略して書くことが出来ない。前回のコードを例にとってあげると

import 'javax.swing.JFrame'

は問題ないけど

import 'javax.swing.*'

は出来ないといった具合である。これはちょっと不便なので、もう少しだけ利用しやすい方法を紹介する。Rubyには、classやmoduleというものがあって(詳しくは他のサイトで)、それらの中でだけ使える方法があります。

include Java
class Test
  include_package 'javax.swing'
  def initialize
    frame = JFrame.new
    label = JLabel.new("test")
    frame.add(label)
    frame.set_size(200,200)
    frame.set_visible(true)
  end
end
t = Test.new

この記述で注目して欲しいところは3行目のinclude_packageという行です。文字通り、packageをインクルードするために使うのですが、ここではパッケージ名を書けば全てインクルードできるのですごく便利になるはずです。今回はJFrame以外にもJLabelも利用出来ていることから目的を果たせたと思います。ちなみに、classやモジュールの外で呼び出そうとするとエラーになるので気をつけてください(なんで駄目なのかはこれから勉強します)。

include Java
module Test
    include_package 'javax.swing'
    def test
      frame = JFrame.new
      label = JLabel.new("test")
      frame.add(label)
      frame.set_size(200,200)
      frame.set_visible(true)
    end
end
include Test
test

モジュールでも使えるよという検証?みたいなものです。個人的にはまだmoduleを使わないと困るような事態に陥ってないので(知らないから使ってない可能性がデカイ)不慣れですが、一応問題なく動いてそうです。これで、殆どのJavaの機能が使えるようになるはずです。問題は外部ライブラリの呼び出しですが、それに関しては次回述べていきたいと思います。