© Excellent backgrounds/Shutterstock.com
Java Magazin
Das steckt hinter dem Open-Source-Projekt Vavr

Ein funktionaler Slang


Mit Java 8 hat die funktionale Programmierung in Java Einzug gehalten. Allerdings fehlen in der Standardbibliothek noch viele Features, die man von anderen Programmiersprachen wie Scala kennt. Das Open-Source-Projekt Vavr möchte diese Lücke füllen und stellt unter anderem persistente Datenstrukturen, algebraische Datentypen und bessere funktionale Schnittstellen für Java 8 bereit.

Vavr [1] stellt viele neue persistente Datenstrukturen, algebraische Datentypen – Summen- und Produkttypen – und bessere funktionale Schnittstellen für Java 8 bereit. Alle Datentypen bauen auf einen von drei Basisdatentypen auf: Tuple, Lambda und Value. Jeder Datentyp in Vavr, der einen Wert repräsentiert, ist vom Basisdatentyp Value abgeleitet. Bei der Namensgebung der Datentypen orientiert sich Vavr stark an Scala (Abb. 1). Das Besondere an den Datenstrukturen von Vavr ist, dass sie persistent und somit unveränderlich sind.

winkler_javaslang_1.tif_fmt1.jpgAbb. 1: Vavr-Übersicht

Unter dem Begriff „Persistenz“ versteht man in der Informatik häufig, dass Daten auf einem nicht flüchtigen Datenträger gespeichert werden. Mit dem Begriff „persistente Datenstruktur“ ist dieses Verhalten nicht gemeint. Es meint eher, dass eine persistente Datenstruktur, wenn sie verändert wird, immer eine veränderte Kopie von sich selbst zurückliefert und ihren vorherigen Zustand behält. Man kann also sagen, dass persistente Datenstrukturen unveränderlich sind, da sie effektiv nach ihrer Erstellung nicht mehr modifiziert werden können. Damit das Verändern von persistenten Datenstrukturen nicht zu speicherintensiv ist, können sie sich im Speicher vorgehaltene Werte teilen. Das lässt sich am besten an einem Beispiel einer verketteten Liste erläutern. Listing 1 zeigt, wie mit Vavr eine Liste erstellt und modifiziert werden kann. Zunächst wird eine Liste mit drei Werten erstellt und anschließend der erste Wert der Liste modifiziert (Abb. 2). Der zweite Aufruf erzeugt eine Kopie der Liste, die sich die gemeinsamen Knoten mit der ursprünglichen Liste teilt (Abb. 3).

winkler_javaslang_2.tif_fmt1.jpgAbb. 2: Liste mit drei Werten, der erste Wert modifiziert
winkler_javaslang_3.tif_fmt1.jpgAbb. 3: Kopie der Liste, teilt sich Knoten mit ursprünglicher Liste

Listing 1: Mit Vavr eine Liste erstellen und modifizieren

// = List(1, 2, 3) List<Integer> list1 = List.of(1, 2, 3); // = List(0, 2, 3) List<Integer> list2 = list1.replace(1,0);

Das gleiche Verfahren funktioniert auch bei komplexeren Datenstrukturen wie Queues, TreeSets oder TreeMaps. Vavrs Datenstrukturen haben viele hilfreiche Operatoren, die man au...

Java Magazin
Das steckt hinter dem Open-Source-Projekt Vavr

Ein funktionaler Slang

Mit Java 8 hat die funktionale Programmierung in Java Einzug gehalten. Allerdings fehlen in der Standardbibliothek noch viele Features, die man von anderen Programmiersprachen wie Scala kennt. Das Open-Source-Projekt Vavr möchte diese Lücke füllen und stellt unter anderem persistente Datenstrukturen, algebraische Datentypen und bessere funktionale Schnittstellen für Java 8 bereit.

Robert Winkler, Tim Riemer


Mit Java 8 hat die funktionale Programmierung in Java Einzug gehalten. Allerdings fehlen in der Standardbibliothek noch viele Features, die man von anderen Programmiersprachen wie Scala kennt. Das Open-Source-Projekt Vavr möchte diese Lücke füllen und stellt unter anderem persistente Datenstrukturen, algebraische Datentypen und bessere funktionale Schnittstellen für Java 8 bereit.

Vavr [1] stellt viele neue persistente Datenstrukturen, algebraische Datentypen – Summen- und Produkttypen – und bessere funktionale Schnittstellen für Java 8 bereit. Alle Datentypen bauen auf einen von drei Basisdatentypen auf: Tuple, Lambda und Value. Jeder Datentyp in Vavr, der einen Wert repräsentiert, ist vom Basisdatentyp Value abgeleitet. Bei der Namensgebung der Datentypen orientiert sich Vavr stark an Scala (Abb. 1). Das Besondere an den Datenstrukturen von Vavr ist, dass sie persistent und somit unveränderlich sind.

winkler_javaslang_1.tif_fmt1.jpgAbb. 1: Vavr-Übersicht

Unter dem Begriff „Persistenz“ versteht man in der Informatik häufig, dass Daten auf einem nicht flüchtigen Datenträger gespeichert werden. Mit dem Begriff „persistente Datenstruktur“ ist dieses Verhalten nicht gemeint. Es meint eher, dass eine persistente Datenstruktur, wenn sie verändert wird, immer eine veränderte Kopie von sich selbst zurückliefert und ihren vorherigen Zustand behält. Man kann also sagen, dass persistente Datenstrukturen unveränderlich sind, da sie effektiv nach ihrer Erstellung nicht mehr modifiziert werden können. Damit das Verändern von persistenten Datenstrukturen nicht zu speicherintensiv ist, können sie sich im Speicher vorgehaltene Werte teilen. Das lässt sich am besten an einem Beispiel einer verketteten Liste erläutern. Listing 1 zeigt, wie mit Vavr eine Liste erstellt und modifiziert werden kann. Zunächst wird eine Liste mit drei Werten erstellt und anschließend der erste Wert der Liste modifiziert (Abb. 2). Der zweite Aufruf erzeugt eine Kopie der Liste, die sich die gemeinsamen Knoten mit der ursprünglichen Liste teilt (Abb. 3).

winkler_javaslang_2.tif_fmt1.jpgAbb. 2: Liste mit drei Werten, der erste Wert modifiziert
winkler_javaslang_3.tif_fmt1.jpgAbb. 3: Kopie der Liste, teilt sich Knoten mit ursprünglicher Liste

Listing 1: Mit Vavr eine Liste erstellen und modifizieren

// = List(1, 2, 3) List<Integer> list1 = List.of(1, 2, 3); // = List(0, 2, 3) List<Integer> list2 = list1.replace(1,0);

Das gleiche Verfahren funktioniert auch bei komplexeren Datenstrukturen wie Queues, TreeSets oder TreeMaps. Vavrs Datenstrukturen haben viele hilfreiche Operatoren, die man au...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang