Show Menu
Cheatography

Grundbegriffe im Framework

Litera­tur­ver­zei­chnis

Grundl­egende Konzepte in Vavr

* Alle Datens­tru­kturen sind inmutable (unver­änd­erlich) - psynonym kann der Leser auf den Begriff persis­tente Datens­tru­kturen treffen. In diesem speziellen Fall ist dann meist nicht die Datenb­ank­per­sistenz gemeint, sondern die Unverä­nde­rli­chkeit.
* Partielle Funkti­onen: Umgang­spr­achlich sind diese Funktionen nicht für alle Werte definiert z.B. die Division welche als Division durch 0 nicht definiert ist und eine entspr­echende Exception werfen sollte.
* Lifting: Durch lifting lassen sich partielle Funktionen in totale Funktionen wandeln. Das funkti­oniert 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 versch­luckt. Daher steht letztlich im Ergebnis für jedes X ein Ergebn­iswert bereit auch wenn dieser nur None also eine Art undefi­niert ist.
* Cyrring erlaubt die Verrin­gerung der Parame­ter­anzahl einer Funktion indem diese als Ergebnis eine Funktion mit der gekürzten Parame­ter­liste zurück liefert. Diese wird dann erneut mit Werten aufger­ufen. Achtung: Auf der einen Seite wird die Lesbarkeit der Funktion verbes­sert, 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 Konstr­ukt­ionen im Objekt­ori­ent­ierten Umfeld einsetzt.
* Memoiz­ation: Erster Aufruf der Funktion erzeugt den Wert, weitere Aufrufe geben den gecachten Wert zurück.
* Ciricuit Breaker: Schützt Method­ena­ufrufe z.B. durch "im Fehlerfall 5x wieder­holen, dann nicht mehr".
* Bestimmte Funktionen in Vavr wie z.B. map werden nur im Erfolg­sfall ausgeführt und andere nur im Fehler­fall. Der Fehlerfall wird vom Konzept her von der linken Seite bzw. der None Seite, bzw. dem failure bereit­ges­tellt wohingegen der Erfolg­sfall von der rechten Seite bzw. der Some Seite bzw. der success Funktion bereit­ges­tellt werden.
 

Datentypen

Option
(seria­lis­ierbar) Kapselung optionaler Werte, Vermeidung von Nullchecks (Some oder None)
Try
Erfolg oder Misser­folg, Ausführung für success oder recover möglich
Either
Links oder Rechts
Functi­on0...F­un­ction8
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();
           
 

Comments

No comments yet. Add yours below!

Add a Comment

Your Comment

Please enter your name.

    Please enter your email address

      Please enter your Comment.

          Related Cheat Sheets

          Selenium WebDriver Cheat Sheet Cheat Sheet
          Cypressio Cheat Sheet
          ISTQB Test Automation Engineering Cheat Sheet

          More Cheat Sheets by FunThomas424242

          Linux - Minihilfe Cheat Sheet