(個人的)Clojureのコーディングルールめも
Clojureの個人的なコーディングルールを整理しておく。
シンボルの命名
全般
- 「-」区切りの単語列
関数
- 状態を変化させる関数には末尾に「!」を付与
- 述語には末尾に「?」を付与
関数以外のvar
- グローバルを意識したvarのシンボルには、接頭と末尾に「*」を付与
束縛
- 値を気にしない束縛には「_」を使う
名前空間
- プロジェクト内のライブラリは use で読み込む
- 外部ライブラリは基本的に require :as で読み込む
- 頻用する関数等、名前空間に直接読み込んだ方が明らかに可読性が上がる場合は use :only で読み込む
(参考)OSSプロジェクトでの例
- プロジェクト内ライブラリの読み込み
- require :as で読み込んでいる:Ring, Korma, ...
- use で読み込んでいる:Compojure, Hiccup, ...
メタデータ
- doc-stringは必ず記述する(nsおよび各種def)
- :author を記述する?(←ソースに著者情報とか入れるべきか迷い中。clojure.coreのnsには記述されているが・・・。RingみたいにCONTRIBUTORS.mdとか作って関係者列挙とかの手もある)
- :added で追加されたバージョンを明記する?(←同じく迷い中。バージョン管理システム側に任せて良い気もする)
スコープ
- 純粋関数は基本的にグローバルで定義(defn)すること?(←迷い中。再利用奨励したいのが意図だが)
- グローバルで定義した関数の外部仕様は無断変更禁止
- 嫌なら defn- で定義すること