Cheatography
https://cheatography.com
Grundbegriffe im Framework
Grundlegende Konzepte in Vavr
* Alle Datenstrukturen sind inmutable (unveränderlich) - psynonym kann der Leser auf den Begriff persistente Datenstrukturen treffen. In diesem speziellen Fall ist dann meist nicht die Datenbankpersistenz gemeint, sondern die Unveränderlichkeit.
* Partielle Funktionen: Umgangsprachlich sind diese Funktionen nicht für alle Werte definiert z.B. die Division welche als Division durch 0 nicht definiert ist und eine entsprechende Exception werfen sollte.
* Lifting: Durch lifting lassen sich partielle Funktionen in totale Funktionen wandeln. Das funktioniert z.B. durch Rückgabe eines Option welcher einen konkreten Wert oder aber None als Ausprägung annimmt. Alle Werte bei denen Exceptions auftreten würden, werden dann auf None gemappt und die Exceptions silent verschluckt. Daher steht letztlich im Ergebnis für jedes X ein Ergebniswert bereit auch wenn dieser nur None also eine Art undefiniert ist.
* Cyrring erlaubt die Verringerung der Parameteranzahl einer Funktion indem diese als Ergebnis eine Funktion mit der gekürzten Parameterliste zurück liefert. Diese wird dann erneut mit Werten aufgerufen. Achtung: Auf der einen Seite wird die Lesbarkeit der Funktion verbessert, weil nicht mehr so viele Parameter zu übergeben sind aber auf der anderen Seite versteht man den Code auf der Seite des Aufrufers nicht mehr intuitiv, da hier eine Funktion mit Werten aufgerufen und das Ergebnis dann gleich wieder mit Werten aufgerufen wird. Das ergibt nur bei echten Funktionen mit echter Bedeutung Sinn. Zumindest wenn man diese Konstruktionen im Objektorientierten Umfeld einsetzt.
* Memoization: Erster Aufruf der Funktion erzeugt den Wert, weitere Aufrufe geben den gecachten Wert zurück.
* Ciricuit Breaker: Schützt Methodenaufrufe z.B. durch "im Fehlerfall 5x wiederholen, dann nicht mehr".
* Bestimmte Funktionen in Vavr wie z.B. map werden nur im Erfolgsfall ausgeführt und andere nur im Fehlerfall. Der Fehlerfall wird vom Konzept her von der linken Seite bzw. der None Seite, bzw. dem failure bereitgestellt wohingegen der Erfolgsfall von der rechten Seite bzw. der Some Seite bzw. der success Funktion bereitgestellt werden. |
|
|
Datentypen
Option |
(serialisierbar) Kapselung optionaler Werte, Vermeidung von Nullchecks (Some oder None) |
Try |
Erfolg oder Misserfolg, Ausführung für success oder recover möglich |
Either |
Links oder Rechts |
Function0...Function8 |
Funktionen mit 0 bis 8 Parametern vgl. Supplier |
Tupel |
Tupel mit bis zu 8 Parametern möglich |
Lifting
Function2<Integer, Integer, Integer> divide=(a,b)->a/b;
Function2<Integer, Integer, Option<Integer>> safeDivide = Function2.lift(divide);
|
Memorize
Function0<Double> hashCache=Function0.of(Math::random).memoized();
double randomValue1 = hashCache.apply();
double randomValue2 = hashCache.apply();
then(randomValue1).isEqualTo(randomValue2);
|
Option
String helloWorld = Option.of("Hello")
.map( value -> value + "world")
.getOrElse(()-> "Recover");
|
Tupel
Tuple2<String, Integer> java8 = Tuple.of("Java","8");
Tuple2<String, Integer> vavr2 = Java8.map(
s -> s + "slang",
i -> i / 4
);
String first = vavr2._1;
int second = vavr2._2;
|
Lazy
Lazy<Double> lazy=Lazy.of(Math::random);
lazy.isEvaluated(); // false
lazy.get() // 0.123 (random)
lazy.isEvaluated(); // true
lazy.get() // 0.123 (cached)
|
Try
// Serviceinterface mit Checked exceptions
public interface HelloWorldService{
String sayHelloWorld(String name) throws BusinessException;
}
public class HelloWorldService{
Try<String> sayHelloWorld( String name){
return Try.of(()->backendDao.sayHelloWorld(input));
}
}
String result = helloWorldService.sayHelloWorld("Robert")
.map(value -> value + " and all readers")
.recover(throwable -> "Handle exception and recover")
.get();
|
|
Created By
https://github.com/Huluvu424242
Metadata
Comments
No comments yet. Add yours below!
Add a Comment
Related Cheat Sheets
More Cheat Sheets by FunThomas424242