Help us understand the problem. What is going on with this article?

Clojureスタイルガイド(日本語版)

Bozhidar Batsov氏によるClojureスタイルガイドを日本語訳しました。

Clojureスタイルガイド https://totakke.github.io/clojure-style-guide/

GitHubで管理されているコミュニティベースのコーディング規約集です。例も豊富でわかりやすいため、Clojurianは一度目を通しておくことをおすすめします。

本翻訳版もGitHubで管理されています。

totakke/clojure-style-guide https://github.com/totakke/clojure-style-guide

翻訳に関する指摘や修正は、IssueやPull Requestを作成してもらえれば、適宜修正を行っていきます。なお、スタイル自体への意見は原文プロジェクトにお願いします。


以下にスタイルガイドの一部を紹介します。全文は Clojureスタイルガイド をご覧ください。

サンプル

  • 各インデントには スペース を使う。タブは使わない。[リンク]

  • letの束縛とマップのキーワードを揃える。[リンク]

    ;; 良い
    (let [thing1 "some stuff"
          thing2 "other stuff"]
      {:thing1 thing1
       :thing2 thing2})
    
    ;; 悪い
    (let [thing1 "some stuff"
      thing2 "other stuff"]
      {:thing1 thing1
      :thing2 thing2})
    
  • 複数行にわたるドキュメント文字列はインデントする。[リンク]

    ;; 良い
    (defn foo
      "Hello there. This is
      a multi-line docstring."
      []
      (bar))
    
    ;; 悪い
    (defn foo
      "Hello there. This is
    a multi-line docstring."
      []
      (bar))
    
  • 1行が80文字を超えないようにする。[リンク]

  • 行末の空白を避ける。[リンク]

  • 名前空間ごとにファイルを分ける。[リンク]

  • 全ての名前空間は、複数のrefer, require, importからなるnsフォームで始める。順序は慣習的にrefer, require, importの順とする。[リンク]

    (ns examples.ns
      (:refer-clojure :exclude [next replace remove])
      (:require [clojure.string :as s :refer [blank?]]
                [clojure.set :as set]
                [clojure.java.shell :as sh])
      (:import java.util.Date
               java.text.SimpleDateFormat
               [java.util.concurrent Executors
                                     LinkedBlockingQueue]))
    
  • 関数本体内では、コンディションマップによる入力値、出力値のチェックがより良い。[リンク]

    ;; 良い
    (defn foo [x]
      {:pre [(pos? x)]}
      (bar x))
    
    ;; 悪い
    (defn foo [x]
      (if (pos? x)
        (bar x)
        (throw (IllegalArgumentException "x must be a positive number!")))
    
  • シーケンスが空かどうかをチェックするにはseqを使う(このテクニックはしばしば nil punning と呼ばれる)。[リンク]

    ;; 良い
    (defn print-seq [s]
      (when (seq s)
        (prn (first s))
        (recur (rest s))))
    
    ;; 悪い
    (defn print-seq [s]
      (when-not (empty? s)
        (prn (first s))
        (recur (rest s))))
    
  • predcollのような慣習名にはclojure.coreの例が参考になる。[リンク]

    • 関数内では、
      • f, g, h - 関数入力
      • n - サイズを示す整数値
      • index, i - 整数のインデックス
      • x, y - 数値
      • xs - シーケンス
      • m - マップ
      • s - 文字列入力
      • re - 正規表現
      • coll - コレクション
      • pred - 述語クロージャ
      • & more - 可変長引数
      • xf - xform、transducer
    • マクロ内では、
      • expr - 式
      • body - マクロ本体
      • binding - マクロの束縛ベクタ

などなど。

詳しくは Clojureスタイルガイド へ。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした