📝Clojure コーディング規約と慣習まとめ

📝Clojure コーディング規約と慣習まとめ

Clojureの書き方の慣習まとめ.

個人的な思想としてコーディング規約は人間がチェックするものではなくlinterやformatterを使って自動整形すべきだと思う.

Clojure スタイルガイド #

Clojureスタイルガイド が大変参考になる. あとはGitHubで他人のコードリーディング.

このスタイルが実質Clojure界隈でデファクトスタンダードになっていて, いろんなリポジトリを覗いてもこれに従って書かれている.

ここにはとりあえず身につけたい努力目標をメモしていく. 本当はスタイルとかは個人の努力に頼るのはアンチパターンでツールでチェックするのがいい.

関数名や変数名は kebab-case aka. lisp-case #

ref: https://totakke.github.io/clojure-style-guide/#lisp-case

🏷kebab-case

別の命名規約との変換のライブラリとして, Clojureでは camel-snake-kebab というものが有名.

https://github.com/clj-commons/camel-snake-kebab

マイクロサービス開発だと, 各言語によって変数名が異なるので変換が必要.

Clojureで作ったAPIをマイクロサービスの海に隠す - ayato-p

Protocols/Records/Structs/TypesはPascalCase #

ref: プロトコル、レコード、構造体、型はCamelCaseで

🏷PascalCase

private functionsには defn- で印をつける #

ref: https://totakke.github.io/clojure-style-guide/#private

副作用の持つ関数は!, 変換をする関数の名称はtoではなく-> #

e.g.) reset!

Java Classでパフォーマンスが下がったら^でType Hintsをつける #

reflection抑止によるコンパイル速度向上.

ref: https://clojure.org/reference/java_interop#typehints

どちらかというと,使うなという意味だな🤔

Normally, one should avoid the use of type hints until there is a known performance bottleneck.

リフレクションってなに?と思ったら過去記事を書いてた…

🖊Java のリフレクションでインスタンスやメソッドを動的生成する | Futurismo

定数に特別な表記をしない #

JavaとかPythonで定数を大文字にする慣習は注意. Clojureでは全てが定数なので不要.

(def MAX-SIZE 10) ; Java style NG!!!

🤔名前空間やファイル名は単数か複数か問題 #

基本的には単数系だと思っていたけれども複数系で使っているケースもあったので調べてみた(example). ちなみにPluralが複数形, singlarが単数系の検索ワード.

Javaからの流れでnamespaceがドメインやクラスと対応するように考えると単数なのかなと思いこんでいた. 一応conventions的な制約はないようだ. 引き続きサンプル収集をして追記する.

この話題に関しては, Javaのpackageの命名問題で検索するとより情報がでてくる. 言語の制約ではなくこれは設計の問題. Javaのクラスには Collections (Java Platform SE 7 ) のように複数系をもつネイティブなクラスも存在する.

まあ統一感がありわかりやすければなんでもいいかも.

see also. 📝Clojure: 名前空間のスタイルガイド

Better Clojure formatting #

alternative to Clojure Style Guide.

Better Clojure formatting @ tonsky.me

References #


Tags