Clojureを使ってみる
たまたまClojureを触ってみて、なんだか良さそうだと感じたのでいろいろ書き散らしている。
環境構築が比較的容易で、WEBアプリが作りやすそうなのがよかった。あとScalaほど四角四面ではなく、Groovyほど壊れにくい*1
環境構築
まずこれでMavenと連携させてみる
Leiningen
そしてLeiningenを入れる
Windowsの場合、Msys2上でUNIX用のスクリプトを動かしたほうが早い
> wget https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein -O /usr/bin/lein > lein self-install > lein --version Leiningen 2.7.1 on Java 1.8.0_112 Java HotSpot(TM) 64-Bit Server VM
Maven化
プロジェクトを作ってMaven化
$ lein new wiki
project.clj ができるので、そこからpomを作る
$ lein pom
leinが出力するpom.xmlは、全部project.cljが元である。Mavenに慣れているならパズルゲームみたいな感じで設定出来ると思う。
Hello, World!!
ここからHello, Worldまではこのサイトがわかりやすい
core.cljを書き換えて・・・最終的にこうなった
(ns wiki.core (:gen-class main true)) (defn -main "I don't do a whole lot." [& args] (println "Hello, World!"))
Emacs
適当にこんな感じ
;; Clojure (unless (package-installed-p 'clojure-mode) (package-refresh-contents) (package-install 'clojure-mode)) (require 'clojure-mode) (add-to-list 'auto-mode-alist '("\\.clj$" . clojure-mode))
EmacsでモダンClojure開発環境構築 - Qiita
新: Emacs を使うモダンな Clojure 開発環境 - Qiita
cider-modeはmsys2では動かないかもしれない。
コレクション操作
Ruby
見慣れた形、データが先で関数で回す
# listの中身をトレース [1, 2, 3].each do |n| puts n end # mapの中身をトレース { 1 => "a", 2 => "b", 3 => "c" }.each do |k, v| puts "#{k}, #{v}" end
Clojure
Lispなのでデータが後で関数が先
mapについては doseq, reduce-kv 2つの関数を見つけた
; listの中身をトレース (map #(println %) [1 2 3]) (map #(prn %) [1 2 3]) ; mapの中身をトレース (doseq [[k v] {1 "a" 2 "b" 3 "c"}] (prn k v)) (reduce-kv #(println %2 %3) 0 {1 "a" 2 "b" 3 "c"})
マクロとかLispっぽさ、関数型言語っぽい書き方もできたりするのだろうか。
チュートリアルを見ているとClojureは結構実用的に感じた。
Clojure の日本語ガイド — Clojure の日本語ガイド
- 作者: 山田剛史,杉澤武俊,村井潤一郎
- 出版社/メーカー: オーム社
- 発売日: 2017/07/15
- メディア: Kindle版
- この商品を含むブログを見る
*1:偏見…?