generated at
clojure.spec
Clojureに型っぽいのを書くライブラリ


型というかvalidatorを作るライブラリかmrsekut
検証するためには、毎回s/valid?を呼ばないといけない






GPT-4
基本的な使い方
スペックの定義
s/defを使ってスペックを定義します。
例えば、特定のキーワードが整数であることを定義します。
データの検証
s/valid?を使ってデータがスペックに従っているかを検証します。
データの生成
s/genを使ってスペックに従ったデータを生成します。
サンプルコード
以下は、ユーザー情報をスペックとして定義し、それを検証するサンプルコードです。
clojure
(ns user (:require [clojure.spec.alpha :as s] [clojure.spec.gen.alpha :as gen])) ;; 1. スペックの定義 (s/def ::name string?) (s/def ::age (s/and int? #(<= 0 % 120))) (s/def ::email (s/and string? #(re-matches #".+@.+\..+" %))) (s/def ::user (s/keys :req-un [::name ::age ::email])) ;; 2. データの検証 (def sample-user {:name "John Doe" :age 30 :email "john.doe@example.com"}) (println (s/valid? ::user sample-user)) ;; true (def invalid-user {:name "John Doe" :age 150 :email "john.doe@example.com"}) (println (s/valid? ::user invalid-user)) ;; false ;; 3. データの生成 (def user-gen (s/gen ::user)) (println (gen/sample user-gen 3))
解説
1. **スペックの定義**
clojure
(s/def ::name string?) (s/def ::age (s/and int? #(<= 0 % 120))) (s/def ::email (s/and string? #(re-matches #".+@.+\..+" %))) ```
- ::name は文字列であることを定義しています。
- ::age は整数であり、0以上120以下であることを定義しています。
- ::email は特定の正規表現にマッチする文字列であることを定義しています。

2. **データの検証**
clojure
(s/valid? ::user sample-user)
- s/valid? はデータがスペックに従っているかを検証します。 sample-user は正しいデータなので true を返します。
- invalid-user は年齢が範囲外なので false を返します。

3. **データの生成**
clojure
(s/gen ::user)
- s/gen はスペックに従ったデータを生成します。 gen/sample を使って3つのユーザーデータを生成しています。

これで、Clojureの clojure.spec を使った基本的なデータの定義、検証、生成の方法がわかりました。 clojure.spec は強力なツールなので、さらに詳細な機能やカスタマイズについても学ぶと良いでしょう。