背景 アプリケーションの中で一度だけ行いたい初期化・終了処理を書くことはよくあります. 例えば,データベースへの接続や外部リソースの初期化などです. Clojureプログラムにおいて,このような初期化・終了の処理というのは意外と面倒です. 普通に走るプログラムであれば -main 関数などの開始時・終了時に処理を書けばよいのですが,ClojureプログラムはREPL環境で開発される場合が多いので,そうもいきません. 例えば,データベースへのハンドラを管理する場合を考えてみましょう.アプリケーションの開始時にコネクションを作成し,終了時に開放するとします.一番簡単なのは,varに束縛してしまうことです. (def conn (create-db-conn)) (defn foo [] ;; connを使う ) しかし,これだとconnの解放のタイミングがよくわかりません.REPLのセッション
Clojureにおいて,キーワードは多用されます.実は,キーワードには名前空間(namespace qualifier)をつけることができます.従来はそれほど重要性は高くありませんでしたが,Clojure 1.9におけるcore.specの導入により,にわかに重要性が高まりました.機能自体は以前から存在していますが,Spec Guideを読んではじめてqualifiedキーワードの登場に面食らった人も多いのではないでしょうか. このエントリーでは,qualifiedキーワードの記法についてまとめ,次にcore.specにおける利用方法,最後にcore.spec以外での利用方法についてまとめます. 名前空間付きキーワードの記法 Clojureにおいては,一般のvarが名前空間に属するのと同様にキーワードも名前空間に属することができます.名前空間付きキーワードは, :namespace/foo
ClojurescriptのQuick Startをやってみた。その時の内容をメモ。 http://niku.name/articles/2015/08/29/ClojureScript%20Quick%20Start%20%E6%97%A5%E6%9C%AC%E8%AA%9E%E8%A8%B3 の和訳記事も参考にしています。 まずは、プロジェクトのディレクトリを作成。 mkdir hello_cljs cd hello_cljs clojurescriptコンパイラ standalone ClojureScript JAR をDLしてプロジェクトのルートに配置。 MACなら例えば、 mv ~/Downloads/cljs.jar ./ このjarがコンパイラ。 アプリケーション・ソースコード ソースコードのファイルを作成し、 mkdir -p src/hello_cljs touch s
Clojureではユニットテスト用のフレームワークとコマンドが標準で用意されているので楽チンですが、ClojureScriptはちょっと面倒です。そこで、今回は楽にするdooを紹介。今回は、ちょっと記事が長め。 Clojureには、clojure.testというユニットテストフレームワークが標準で用意されています。 deftestマクロなどを使って書いたテストケースはこんな感じです。 (deftest a-test (testing "FIXME, I fail." (is (= 0 1)))) あ、これは標準のプロジェクトテンプレートで書かれているものですが、これを下記のleinコマンドで実行すると、テスト結果が出力されます。 $ lein test Testing cljs-test.core-test FAIL in (a-test) (core_test.clj:7) FIXME,
The original article is written by Alex Miller (@puredanger). Translated by Keisuke Fukuda (@keisukefukuda) この記事は,”Inside Clojure’s Collection Model”の日本語訳です.原著者のAlex Millerさんの許可を得て公開しています.翻訳に関する指摘は翻訳者まで.(athosさんありがとうございました) Alex Millerさんは,Clojureの主要な開発者の一人であり,リリースマネージャの役割もされ,メーリングリストにおける活動量も非常に多い方です.また,Clojure Applied: From Practice to Practitionerの著者でもあります. Clojureのコレクションについて,私(翻訳者)の記事「Clojureにおけ
These questions and answers are adapted from mailing lists and other Clojure community forums. Keywords are cached and interned. This means that a keyword is reused (reducing memory) everywhere in your program and that checks for equality really become checks for identity (which are fast). Additionally, keywords are invokable to look themselves up in a map and thus this enables the common pattern
re-frameは、reagentを利用したClojureScriptによる、SPA開発のためのプラクティスで、充実したガイドラインと少量のライブラリを提供しています。 reagentとre-frameの関係はReact.jsとFluxの関係に似ています。 概要 re-frameでは、app-dbと呼ばれる単一のグローバルなステートのみが存在しています。app-dbの値を更新し、app-dbを変更をサブスクライブすることで、リアクティブな動作を実現できます。 reagent単体では、イベントの実行方法や、関心のあるステートの更新のみをサブスクライブする統一された記述方法が定義されておらず、実装者任せになりますが、re-frameを用いると標準的な枠組みで実装できるようになります。 re-frameで、登場する主な要素は以下です。 要素 役割 react-reduxでのイメージ
23 December 2015 It’s been a very exciting year for ClojureScript. It’s clear that things have been accelerating and here is a personal selection of highlights: CLJSJS While technically it appeared in late 2014, CLJSJS took off when ClojureScript landed enhanced and standardized support for foreign dependencies in January. Thanks to the tireless work of many contributors, the wider community of Cl
この記事は Clojure Advent Calendar 2015 - Qiita の12月22日の記事です(微妙に遅刻しましたすんません) データを関数で変換しながら次々に処理していくことを考えましょう。関数を頂点、頂点同士の処理の順番と依存関係を辺とするグラフ構造を用いて処理を表現することができることがわかるでしょうか。古き良きフローチャートと似たものです。処理がループすることを許さないとすると、このグラフ構造は有向非循環グラフ、つまりDirected Acyclic Graph (DAG)となることがわかります。 例えば、下の3つの関数を連続して呼び出すコードは (defn f [x] ;; なんとかかんとか) (defn g [x] ;; なんとかかんとか) (defn h [x] ;; なんとかかんとか) (def call [x] (h (g (f x)))) のようになりま
はじめに iOSアプリ開発の主流は,Objective-CやSwiftを用いたネイティブアプリ開発です.HTML5を用いたCordovaや,UnityからiOSエクスポートするといった方法もあります.そのような中,Facebookの発表した[React Native][react-native]では,Virtual DOMで大きな注目を浴びたReact.jsと同様のスタイルでJavaScriptを記述することで,iOSアプリ開発を行うことができます. 一方で,Clojureの文法で記述したコードをJavaScriptにコンパイルするClojureScriptの世界では,[Om][om]と呼ばれるReact.jsラッパーが人気です.React.jsの仕組みはイミュータブルであることを根幹においているClojureと非常に相性が良いといわれています. React.jsのような仕組みを使えるRe
今まで何度も「使ってみたら面白そうだな~」と思いつつ、目先の忙しさで放置して身につかずだったライブラリ、それが私にとっての Schema の位置付けです。Advent Calendar を書くのは、勉強するには絶好の機会だと思い、解説がてら試したこと等整理してみたいと思います(ほとんど自分用メモかもしれません...) Schema is 何? Clojure(Script)は Lisp なので、関数の引数、戻り値、変数等々の型宣言は不要です。これはLisperにとっては普通なことではありますが、逆に仕様変更で修正が漏れたことに気づかないまま動いてしまう「動的言語あるある」を誘発してしまうことにもつながります。 Schema は、そんな Clojure に「緩い型」をもたらしてくれます。型の定義を宣言的に記述でき、また与えられたデータがその型定義に合致するかの検証をしてくれます。ただし宣言し
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く