Box
Verpacken -> Verarbeiten -> Auspacken
Beschreibung
Das Box Konstrukt erleichtert das Verarbeiten von beliebigen Werten. Die Werte werden in eine "Box" eingepackt und danach gemapped (weiterverarbeitet). Dabei entsteht eine Art linearer Datenfluss, der die Leserlichkeit des Codes erhöht. Ausserdem werden keine Variablen-Deklarationen für die Zwischenstände benötigt, weil das Resultat der Verarbeitung direkt in die nächste Funktion weitergeleitet wird.
Mit dem Box Konstrukt kann eine Art Pipeline aufgebaut werden, bei dem ein Wert durch diese Pipeline geschickt wird und bei jedem fmap wird der Wert weiter prozessiert. Um am Schluss an den verarbeiteten Wert zu kommen wird die letzte Prozessierung nicht mit fmap sondern mit fold durchgeführt.
Beispiel Anwendung
Code ohne Verwendung von Box
const p = {firstName: "Lukas", lastName: "Mueller"};
const addSalutation = fullName => male => (male ? "Mr. " : "Mrs. ") + fullName;
const fullName = p.firstName + " " + p.lastName;
const fullNameUpperCase = fullName.toUpperCase();
const nameWithSalutation = addSalutation(fullNameUpperCase)(true); // Mr. LUKAS MUELLERCode mit Verwendung von Box
const p = {firstName: "Lukas", lastName: "Mueller"};
const addSalutation = fullName => male => (male ? "Mr. " : "Mrs. ") + fullName;
const nameWithSalutation = Box(p)
(fmap)(p => p.firstName + " " + p.lastName)
(fmap)(fullName => fullName.toUpperCase())
(fold)(fullNameUpperCase => addSalutation(fullNameUpperCase)(true)); // Mr. LUKAS MUELLERVerwendung
Die Funktion Box wird verwendet um einen beliebigen Wert in eine "Box" zu verpacken.
Die Funktion fmap wird verwendet um den Inhalt einer Box zu verarbeiten (mappen). Diese fmapFunktionsaufrufe können beliebig oft hintereinander angewendet werden (chainning von Funktionen). Durch das "chainning" wird eine Art Pipeline aufgebaut.
Die Funktion fold wird verwendet um einen Wert in der "Box" zu mappen und anschliessend zu extrahieren (den Inhalt aus der Box auszupacken).
Die Funktion chain wird verwendet um ein flatMap durchzuführen. Wenn eine Map-Funktion eine Box erstellt, würde mit fmap eine Box in einer Box entstehen. Um diese extra Box zu entfernen bzw. das gemappte Ergebnis abzuflachen gibt es die Methode chain. Dadurch können auch geschachtelte Box Aufrufe stattfinden.
Die Funktion getContent wird verwendet um den Inhalt einer "Box" zu entpacken.
Die Funktion app wird verwendet um eine eingepackte Funktion (Funktion in einer Box) auf einen eingepackten Wert anzuwenden.
Die Funktion liftA2 wird verwendet um eine Funktion auf zweit eingepackte Werte anzuwenden.
Helferfunktion
Die Funktion debug ist eine Helferfunktion, die für debug Zwecke da ist. Die Funktion hilft dem Anwender die Zwischenresultate zu untersuchen in einer Pipeline.
Box Featurings
Box mit Maybe
Um die die Box Konstruktion mit Maybe Werten zu verwenden, gibt es spezielle Funktion, die das verarbeiten von Maybe Types erleichtern. Somit wird das prozessieren mit dem Maybe Type vereinfacht und die Maybe Types können verknüpft werden.
Die Funktion fmapMaybe entspricht der Funktion fmap für einen Maybe Type.
Die Funktion foldMaybe entspricht der Funktion fold für einen Maybe Type
Die Funktion chainMaybe entspricht der Funktion chain für einen Maybe Type.
Die Funktion appMaybe entspricht der Funktion app für einen Maybe Type.
Die Funktion liftA2Maybe entspricht der Funktion liftA2 für einen Maybe Type.
Last updated
Was this helpful?