previous up next
Previous: 5 並行処理 Up: 特徴 (翻訳開始前)

6 JVM上での動作

Clojureは、JVM (Java仮想マシン)上で動き、型システム、ガーベッジ・コレクション、スレッドなどを利用する言語として設計された。関数はすべてJVMバイトコードにコンパイルされる。ClojureはJavaのライブラリを利用するのに適しており、Javaのピリオド連結表記をそのまま利用できる。クラス名の全体を書いて呼び出すことが可能だが、インポート後には短縮名も使える。Clojureでは、プロクシーを用いることで、Javaクラスとインターフェースを動的実装することができる。

Swingの小さなアプリの例:

(import '(javax.swing JFrame JLabel JTextField JButton)
        '(java.awt.event ActionListener)
        '(java.awt GridLayout))
(defn celsius []
  (let [frame (JFrame. "Celsius Converter")
        temp-text (JTextField.)
        celsius-label (JLabel. "Celsius")
        convert-button (JButton. "Convert")
        fahrenheit-label (JLabel. "Fahrenheit")]
    (.addActionListener convert-button
      (proxy [ActionListener] []
        (actionPerformed [evt]
          (let [c (Double/parseDouble (.getText temp-text))]
            (.setText fahrenheit-label
               (str (+ 32 (* 1.8 c)) " Fahrenheit"))))))
    (doto frame
      (.setLayout (GridLayout. 2 2 3 3))
      (.add temp-text)
      (.add celsius-label)
      (.add convert-button)
      (.add fahrenheit-label)
      (.setSize 300 80)
      (.setVisible true))))
(celsius)

Image celsius



MARUI Atsushi
2013-01-12