---
title: Clojureオレオレコーディング規約
tags: []
categories: ["Programming", "Lisp", "Clojure"]
date: 2010-04-04T17:17:09Z
updated: 2010-04-04T17:44:44Z
---

<p>
しばらくClojureのコードを書いてみてしっくりきている書き方をオレオレ規約化してメモしていく(随時更新予定)。規約策定者募集!ネタがあれば<a href="http://twitter.com/making">@making</a>まで。
</p>
<h3>コーディング編</h3>
<ul>
<li>Javaインスタンス生成は<code>(ClassName.)</code>形式。(<code>new</code>書くのメンドイし<code>.</code>ついてりゃ明白)</li>
<li>Javaメソッドの呼び出しは<code>(.method obj)</code>形式。(<code>.</code>とメソッド名が離れていると可読性が悪い。<code>..</code>とか見たくない)</li>
<li>無名関数は引数の数が1以下の場合は<code>%(...)</code>形式、2以上の場合は<code>(fn [x y] ...)</code>形式。(2以上の場合は変数名に意味を持たせましょう)
<li>リフレクションを(極力)発生させないこと(特にライブラリ)。<code>*warn-on-reflection*</code>を<code>true</code>にしてテスト。メソッドを呼ぶオブジェクトを引数に取るときは型ヒントをつけること。</li>
<li>(当たり前だけど)<code>defn</code>の中で<code>def</code>、<code>defn</code>しない。<code>let</code>、<code>letfn</code>で。</li>
<li>副作用があるときに明示的に<code>do</code>しなくても良い</li>
<li>閉じ括弧は右下にまとめる</li>
</ul>
<h3>プロジェクト編</h3>
<ul>
<li>ビルドはLeiningenを使う。生ant使うな</li>
<li>ディレクトリ構成は<code>lein new</code>でできるもの。</li>
<li>ライブラリ系のメインファイルは<code>{namespace}/core.clj</code>がメイン。</li>
<li>アプリ系のメインファイルは<code>{namespace}.clj</code>がメイン。(この辺はまだしっくりきてないけど、、<code>core.clj</code>のほうがいいかな)</li>
<li>リリースに不要なjarを<code>project.clj</code>の<code>:dependancies</code>に入れない。開発時にのみ必要なものは<code>:dev-dependancies</code>に入れない</li>
</ul>
