Clojureを一年ほど書いてきた感想
基本的な感想は
Clojureはいいぞ
というものです。はい
あと趣味ではElm書いてます。Haskellとかそっち方向の言語なのでClojureとはだいぶ違います プロダクト
社内のちょっとした統計処理みたいなの
以上のプロダクトで書いています
趣味では書いてないです
作者がなんかすごい
雑な感想ですみません
Clojureの作者のRich Hickeyがなんかやばいです
講演の日本語解説が下にあるのでみてください
clj-nakanoのイベントでやったやつです。わたしも気力があったら行くんですが
別にすごいからって迎合しろとかいうわけじゃなくて、作ってる人の哲学がちゃんと表現されているものがいいよねって話です
nilは友達
いわゆる他の言語のnullとは扱いが違います
cljの関数は全然nilを受け入れるしどんどんnilを吐きます
さすがMaybeをディスる作者の言語・・・!
ちゃんとnilを受け入れるようにライブラリも作っておかなきゃいけないので文化の問題な気がするんですよね
Javaのコードを呼ぶとぬるぽで落ちる
Clojureの感覚でJavaのコード呼んでぬるぽするのをよくやります
比較とかもJava呼んでるので落ちて、一通り文句言ったりしました
nullと戦う言語をやってないので慣れてないんですよねー
全てがmapでできている
言い過ぎではあります
{:suji 12 :moji "miyamo"}
これがmap, association
:keyみたいなのはkeyword
Clojureでは大体このmapが飛び交うことでシステムが動いています
オブジェクト?クラス?知らない子ですねぇ・・・
system自体もmapだし、requestもmapだし、認証情報もmapだし、apiで返すデータも(大体)mapだし・・・
ednというjsonみたいな形式のファイルがあるんですがそのednもmapだし
プログラムの中とか外とか関係なくmapが飛び交います
printしたらすぐ内部状態が操作可能な形で手に入るのでprintデバッグがはかどるし、よくわかんないrequestの中身もとりあえずprintして何の情報が入ってるのかみれます
よいっすよ
日本コミュニティが最近活発
下期に入ってからなんだかclojureのイベントがいっぱいあります
始めるにはいい時期なのかもしれません
Twitterでつぶやくと助けてくれる
Clojureって入れてつぶやくと誰か(/ayato-p/ayato-p.icon)が助けてくれます
わりと人数の少ないコミュニティはそういう人いますよね
助かってます
記号が多い
初心者にはつらいやつ
まー慣れるよ
でも使わないやつは分かるようにならない
イディオム
Clojureはlispなので最終的にはS式でシンプルなんだと思うんですが
書き心地は知ってるイディオムをつなげて書いているように感じます
いろいろ細やかな関数が多くてそれらを組み合わせていい感じに使ってます
語彙や表現が多いほうが勝つみたいな感覚
分配束縛が柔軟
すごく柔軟です
なんでもできそう
とはいえ柔軟さが許されるのがいつもいいとは限らないよね・・・
Clojureにはよいけど
レゴ
フレームワーク?なんですかそれは・・・
clojureはフレームワークみたいな大きなものじゃなくてsimpleなライブラリを組み合わせて作るみたいです
ライブラリの間はmapが行きかうという
組み合わせを考えたりしなきゃいけないんでしょうけど、わたしは一から構成考えて作ったことないので、各ライブラリの境界が区別ついてないところがあります
大きいもの一個学ぶよりシンプルなものを学ぶ方がわかりやすいと思う
integrant/componentやばい
ばかなのでもうやばいしか言えないんだけどやばい
component lifecycleを管理するライブラリ、なんだけどこれのおかげでオブジェクト?なにそれおいしいの状態になれる
いやまあ、わたしの基準からするとcomponentはオブジェクトなんだけど
DI要素も入ってるし、replからも便利に操作できるし、最高にsimpleだし(適当いってます)、Clojure開発の中心なのでは?
これがないプロジェクトやってないからよくわかんないけど
詳しくは自分でぐぐってください
マクロがわからない
lispといえばマクロのイメージがあるけど勉強せずにClojureやってます
マクロ、言語内DSLみたいなのは簡単に書けるようにする機能だと思うんだけど、自分で作るにはセンスだか能力が足りてないと思ってるのであんまり勉強する気がない
利用の面でいうと見て動作が分からないようなのはよくないと思う
とりあえす今のところはなんとかなってるのでいいかなと
repl中心開発
Clojureはreplが世界の中心です
webpackでよくあるファイルの変更監視なんていらなかったんやという気分
あまりわかってはないんですがnamespaceとかなんかいろいろすごいなーという気分
Elmにも一応replあるんですがちょっと試してみる程度にしか使えないものなので、なんかすごい 分かってないのですごいしかいいません
型がない
最初に統計ぽいことをやってたので、この処理でこれとこれが計算されてーって表現されているところがなかったのでむかついてました
今では型が欲しいとは思ってません。specなるものを使えばいいらしいです
Elmで型ベースで書いているのとは別の感じでコードを保証して書いてる感じがしてるんですが、今一自分では何を保証してるのかはわかりません 型があるとかないとかじゃなくて、その言語では何を書いてどう保証するか、何を保証しないか、みたいなことをつらつら考えていますがまとめられるほどよくわかりません
ただ何らかのパラダイムシフトが得られると思うのでやってみるといいんじゃないでしょうか
まとめ
とりあえず適当に感想を書いておきました
またなにかあったら足すかもしれません
Clojure いいのでやってみるといいんじゃなかろうか
宣伝
この記事はscarapboxで書かれています
みんなでアウトプットしよ