Clojure では「エンティティ」をdefrecord
定義するための一般的な形式として が推奨されていますが、ClojureScript では、さまざまなドキュメントdeftype
に反映されているように、への参照をはるかに多く見つけることができます。
両方の形式の違いは何ですか? どちらを好むべきですか?
deftype
プロトコルを実装する必要最小限のオブジェクトを作成します。
defrecord
プロトコルを実装する不変の永続的なマップを作成します。
どちらを使用するかは、目的によって異なります。完全な ClojureScript データ構造が必要ですか? 次に、レコードを使用します。プロトコルを満たすだけの必要最小限の機能が必要ですか? 次に、タイプを使用します。
あなたが参照する 2 つのドキュメントは、最も基本的なレベルでプロトコルを説明しようとしているため、型を使用しています。
ただし、Clojure/ClojureScript でオブジェクトのようなものを実際に使用する場合は、オブジェクトと共にデータのフィールドを格納する必要があります。そのためには、Clojure の不変コレクションを使用する必要があるのと同じ理由で、レコードを強調して使用する必要があります。
DEFTYPE VS DEFRECORDによると、プログラミング構造とドメイン構造を区別する必要があります。
deftype
はプログラミング コンストラクトdefrecord
用であり、カスタム タイプを必要とするドメイン コンストラクト用です。
お役に立てれば。