(個人的)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- で定義すること

(参考)既存のコーディングスタイルガイド

  http://dev.clojure.org/display/community/Library+Coding+Standards

  https://google-styleguide.googlecode.com/svn/trunk/lispguide.xml