it-swarm.com.de

Idiomatische Fehlerbehandlung in Clojure

Wenn ich meinen C-Hut aufsetze, denke ich, dass vielleicht idiomatische Clojure einfach das Einfache tut und die Rückgabewerte überprüft.

Wenn ich meinen Java-Hut aufsetze (muss ich widerstrebend hinzufügen), denke ich mir, dass es die natürliche Art sein muss, JVM-Ausnahmen zu verwenden, da Clojure auf der JVM ausgeführt wird.

Wenn ich meinen Funktionshut aufsetze, denke ich, dass es eine Art monadisches Konstruktions- oder Threading-Makro geben muss, das Fehler auf kompositorische Weise handhaben kann.

Was ist also die idiomatische Methode, um Fehler in einem Clojure-Programm zu behandeln?

27
Emil Eriksson

Die Behandlung von Clojure-Fehlern ist im Allgemeinen auf JVM-Ausnahmen (nicht aktiviert) ausgerichtet.

Slingshot macht die Verwendung von Ausnahmen angenehmer, indem beispielsweise die Destrukturierung von ausgelösten Ausnahmewerten zugelassen wird.

Für eine Alternative, die eine Fehlerbehandlung im Lang-Stil ermöglicht, sollten Sie sich dire ansehen. Dieser Blog-Beitrag gibt einen guten Überblick über die vernünftigen Gründe sowie einen Überblick über die Mechanismen und Nachteile der Clojure-Fehlerbehandlung.

18
Symfrog

Für einen sehr funktionalen Ansatz werfen Sie einen Blick auf cats , was einer "monadischen Konstruktion" entsprechen würde:

Kategorietheorie und algebraische Abstraktionen für Clojure und ClojureScript. http://funcool.github.io/cats/latest/

Beispiel aus ihrer Dokumentation entnommen:

(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))

Sie können sehen, dass nothing in gewisser Weise nil entspricht, außer dass Sie nichts manuell überprüfen müssen.

4
nha

Das offizielle Mittel zur Fehlerbehandlung in Clojure sind Ausnahmen, da es mit der JVM geliefert wird. Funktionen sind jedoch nicht referenziell transparent, wenn sie Ausnahmen auslösen, und diese Eigenschaft kann auch nicht komponiert werden. Ausnahmen sind nicht funktionsfähig.

Viele Leute haben in Clojure alternative/monadische Fehlerbehandlung in verschiedenen Stilen ausprobiert. Zu diesem Zweck habe ich Promenade https://github.com/kumarshantanu/promenade erstellt und gute Erfahrungen damit gemacht.

0
Shantanu Kumar