JEP Adventskalender #15

JEP 368 – Text Blocks (Second Preview)

Dominik Mohilo

A JEP a day keeps the Christmas blues away! Frei nach diesem Motto stellen wir euch in diesem Jahr zwischen den Jahren sämtliche JEPs der kommenden Java-Version vor. Ganze 16 JEPs haben es in Java 14 geschafft, deutlich mehr als es in den vorigen Versionen Java 12 und Java 13 vertreten waren (8 bzw. 5 JEPs).

Das Jahr 2019 brachte uns Java 12 und Java 13, allerdings waren diese Versionen unserer liebsten Programmiersprache nicht besonders umfangreich, was neue Features betrifft. Größe ist nicht immer der entscheidende Faktor, dennoch waren JDK 12 und 13 nicht vergleichbar mit etwa Java 8 oder Java 9. Dies liegt natürlich auch am neuen Releasezyklus und muss nicht zwangsläufig etwas Negatives sein – im Gegenteil: steter und gleichmäßiger Fortschritt ist einem großen Klotz an neuen Funktionen (und Problemen) von Zeit zu Zeit durchaus vorzuziehen.

Java 14 wird nun aller Voraussicht nach ein wenig „dicker“. Grund genug für uns hier bei JAXenter, über die enthaltenen JEPs zu berichten. Zudem steht Weihnachten vor der Tür! Santa Duke is coming to town – Schauen wir uns einmal an, was er in seinem Geschenkesack hat…

Lesen Sie auch: Java 14: Das JDK ist in der Rampdown-Phase

JEP 368 – Text Blocks (Second Preview)

JEP 326 sah vor, sogenannte Raw String Literals der Programmiersprache bereits in Version 12 hinzuzufügen. Ein solches Raw String Literal kann sich über mehrere Code-Zeilen erstrecken und interpretiert keine Escape-sequenzen wie \n oder Unicode-Escape-Sequenzen wie \uXXXX. Im Gegensatz zu traditionellen String-Literalen, sollten die neuen, ergänzenden Raw Literale nicht interpretiert, sondern wie sie sind als String erzeugt werden. Sozusagen „roh und unbehandelt“ sollten sie es Entwicklern leichter machen, Zeichensequenzen in lesbarer Form und frei von Java-Indikatoren ausdrücken zu können. Dieses JEP wurde viel diskutiert und schließlich auf die lange Bank geschoben, da es dringender Überarbeitungen bedürfe, wie Brian Goetz es auf der Amber-Spec-Experts Mailing-Liste zur Debatte stellte. Engagierte Java-Entwickler wurden dazu aufgerufen, dort Input zu geben und sich an dem Prozess zu beteiligen.

In Java 13 war JEP 355 als Preview-Feature enthalten, mit dem der neue Typ Text Block eingeführt werden sollte. Die Bemühungen des JEPs basierten auf den Grundlagen, die bereits für JEP 326 und die Raw String Literals geschaffen wurde. Die im Vorschlag beschriebenen Textblöcke sollen, dem entsprechenden JEP Draft zufolge, mehrzeilige String-Literale darstellen. Ihre Formatierung soll einheitlichen Regeln unterliegen und sich an der Darstellung des Texts im Quellcode orientieren, sodass Entwickler nicht zwingend auf Befehle zurückgreifen müssen, um das Layout des Texts zu beeinflussen. Zu den Zielen, die mit der Einführung von Text Block verbunden werden, gehört unter anderem das leichtere Gestalten mehrzeiliger Strings für Programmierer. Durch die Regeln zur automatischen Formatierung wären bei einer Einführung des Typs keine Escape-Sequenzen im Stil von \n nötig. Insbesondere solche Java-Programme, die Code anderer Programmiersprachen innerhalb von Strings enthalten, sollen mit dem neuen Format besser lesbar werden.

JEP 368 stellt nun die zweite Preview dar. Basierend auf dem Feedback wurden zwei neue Escape-Sequenzen dem Feature hinzugefügt, die eine feingranulare Kontrolle der Verarbeitung von Newlines und Whitespaces erlauben: \<line-terminator> und \s. Erstere Escape-Sequenz kann genutzt werden, um einen Umbruch für sehr lange String-Literale zu forcieren, ohne diese in kleinere „Substrings“ aufzuteilen.

Ohne \<line-terminator> Escape-Sequenz:

String literal = "Lorem ipsum dolor sit amet, consectetur adipiscing " +
                 "elit, sed do eiusmod tempor incididunt ut labore " +
                 "et dolore magna aliqua.";

Mit \<line-terminator> Escape-Sequenz:

String text = """
                Lorem ipsum dolor sit amet, consectetur adipiscing \
                elit, sed do eiusmod tempor incididunt ut labore \
                et dolore magna aliqua.\
                """;

Die Escape-Sequenz \s lässt sich einfach als einzelnes Leerzeichen (\u0020) beschreiben. Damit lässt sich im unteren Beispiel sicherstellen, dass die Zeilen exakt 6 Stellen haben und nicht länger sind:

String colors = """
    red  \s
    green\s
    blue \s
    """;

Diese Escape-Sequenz kann in den neuen Text Blocks, aber auch in klassischen String-Literalen genutzt werden. Einen offiziellen Guide von Oracle zu Text Blocks finden unsere Leser hier auf JAXenter.

Geschrieben von
Dominik Mohilo
Dominik Mohilo
Dominik Mohilo studierte Germanistik und Soziologie an der Goethe-Universität in Frankfurt. Seit 2015 ist er Redakteur bei S&S-Media.
Kommentare

Hinterlasse einen Kommentar

avatar
4000
  Subscribe  
Benachrichtige mich zu: