Cの帽子をかぶると、慣用的なClojureが単純なことをして、戻り値をチェックするだけだと思います。
Java帽子をかぶったとき(しぶしぶ追加する必要があります)、ClojureはJVMで実行されるため、JVM例外を使用するのが自然な方法である必要があると思います。
機能的な帽子をかぶったとき、エラーを構成可能な方法で処理できる、ある種のモナド構造またはスレッドマクロが必要だと思います。
では、Clojureプログラムでエラーを処理する慣用的な方法は何ですか?
非常に機能的なアプローチについては、 cats
を見てください。これは、「ある種のモナド構造」に対応します。
ClojureとClojureScriptの圏論と代数的抽象化。 http://funcool.github.io/cats/latest/
彼らのドキュメントからの例:
(require '[cats.core :as m])
(require '[cats.monad.maybe :as maybe])
(m/mappend (maybe/just [1 2 3])
(maybe/nothing)
(maybe/just [4 5 6])
(maybe/nothing))
nothing
はnil
とある程度同等であることがわかりますが、手動で何もチェックする必要がない点が異なります。
Clojureでのエラー処理の公式な手段は、JVMに付属しているため、例外です。ただし、関数は例外をスローするときに参照透過性がなく、このプロパティも構成できません。例外は機能しません。
多くの人がClojureでさまざまなスタイルの代替/モナドエラー処理を試しました。私はこの目的のためにプロムナードを作成しました https://github.com/kumarshantanu/promenade そしてそれを使用した良い経験があります。