今回は、前回紹介した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の開発環境などについてみていきましょう。