Clojure事始め

今回は、前回紹介したClojureで簡単なコードを書いてみます。

Clojureは、Java VM 上で動作する言語で、
簡単にJavaのライブラリを読み込んで使用することができます。
そこで、Javaライブラリとして提供されている、
弊社製品biz-Streamの機能をClojureのプログラム呼び出す例を見てみましょう。

以下のbiz-StreamのJavaサンプルプログラムは、

《 biz-Stream Javaサンプルプログラム 》
import java.util.Hashtable;
import com.brainsellers.xml.JaxpXML;
import com.brainsellers.xml.common.XMLSuper;

class sample1 {

    public static void main(String args[]){
        new sample1(args);
        System.exit(0);
    }
    public sample1(String args[]){
        try {
            XMLSuper xml = new JaxpXML(
                "${base-dir}/sample/java/sample1.xml",
                "${base-dir}/sample/java/sample1.pdf");

            xml.parse();
            xml.setAutoResize();

            for(int i=0; i<3; i++){
                if(i != 0){
                    xml.newPage();
                }

                xml.setPageSize();

                Hashtable ht = new Hashtable();
                ht.put("company", "ブレインセラーズ・ドットコム株式会社");
                ht.put("address", "東京都千代田区九段北XX-XX-XX");
                ht.put("phone",   "TEL.XX-XXXX-XXXX");
                ht.put("fax",     "FAX.XX-XXXX-XXXX");

                xml.toPDF(ht);
                xml.flush();
            }

            xml.close();

        } catch(java.lang.Exception e) {
            e.printStackTrace();
        }
    }
}

Clojureでは、以下のように書けます。

《 biz-Stream Clojureサンプルプログラム 》
(import [java.util Hashtable])
(import [java.io IOException])
(import [com.brainsellers.xml JaxpXML])
(import [com.brainsellers.xml.common XMLSuper])

(defn func-sample1 [ags]
  (try
    ( (def xml (JaxpXML. "${base-dir}/sample/java/sample1.xml" "${base-dir}/sample/java/sample1.pdf"))
      (. xml parse)
      (. xml setAutoResize)
      (loop [x 3]
        (if-not (zero? x)
          (let [ht (Hashtable.)]
            (. ht put "company" "ブレインセラーズ・ドットコム株式会社")
            (. ht put "address" "東京都千代田区九段北XX-XX-XX")
            (. ht put "phone" "TEL.XX-XXXX-XXXX")
            (. ht put "fax" "FAX.XX-XXXX-XXXX")
            (if-not (= x 1) (. xml newPage))
            (. xml setPageSize)
            (. xml toPDF ht)
            (. xml flush)
            (recur (dec x)))))
      (. xml close))
    (catch IOException e (. e printStackTrace))))

(defn main [args]
  (func-sample args))

なんとなく、さっぱりしたように感じませんか?
まだ慣れていないので、あまり凝ったことはできませんから、
Clojure的に美しいコードとは言えないのかもしれませんが、
なんとなく、Clojure感がつかめるコードとなっているかと思います。

2つのソースコードを見比べながら、徐々に、Clojureのコードになれて下さい。
次回以降は、Clojureの開発環境などについてみていきましょう。

biz-Stream詳細情報  biz-Stream資料請求

超高速!!高機能!! Web帳票ソリューション biz-Stream

オンデマンドかつリアルタイムにビジネスドキュメントを生成する帳票ソリューション