Java 17: Blöcke ohne geschweifte Klammern

01.04.2021

Kurz nach dem offiziellen Erscheinen von Java 16 wurde eine Änderung angekündigt, die bereits in der nächsten Version kommen soll, nämlich Java 17, das im September 2021 erscheint. JEP-1421 beschreibt eine Anpassung der Sprache in Bezug auf die Notation von Blöcken.

Blöcke, die u.a. für die Deklaration von Klassen, Methoden, for-Schleifen, if-Ausdrücke etc. Verwendung finden, werden derzeit von geschweiften Klammern umrahmt:

public class Main {
    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("Hello World");
            System.out.println("No command line arguments");
        } else {
            System.out.println("Hello " + args[0]);
            System.out.println(args.length + " command line arguments");
        }
    }
}

Ab Java 17 sollen die Klammern entfallen; stattdessen werden wie in Python die Blöcke künftig durch den Grad der Einrückung definiert. Der oben gezeigte Code wird demnach künftig wie folgt aussehen:

public class Main
    public static void main(String[] args)
        if (args.length == 0)
            System.out.println("Hello World!");
            System.out.println("No command line arguments");
        else
            System.out.println("Hello " + args[0] + "!");
            System.out.println(args.length + " command line arguments");

Brian Goetz, Java Language Architect bei Oracle, dazu auf Twitter:

„Java 5 and 8 were big releases with comprehensive new language features, such as Generics and Annotations, respectively Lambdas and Streams. On the other hand, Java 11, the current Long Term Support (LTS) Release, didn’t have much impact on the language itself. Nearly all of the changes were enhancements „under the hood“.

Since Java 17 is destined to be the next LTS, we want it to be special again, particularly regarding improvements to the language itself.“

Die Motivation die hinter dieser Änderung steckt ist, Java-Code lesbarer zu machen. Denn im Vergleich zu Scala oder Kotlin gilt Java-Code als eher „geschwätzig“, denn es ist schwierig, knappen ausdrucksstarken Code in Java zu schreiben.

Wie am Beispiel oben gezeigt, kürzt das Weglassen der schließenden Klammern den Code um ganze 3 Zeilen. Schließlich gilt ja: der beste Code ist der, den man nicht hat, denn diesen muss man nicht verstehen und garantiert fehlerfrei ist er auch. Mit diesem Schritt erhoffen sich die Macher von Java, dass die Sprache im Beliebtheitsgrad der Entwickler wieder steigt. Dazu soll auch die Tatsache beitragen, dass Java nun der Sprache Python etwas ähnlicher wird, die aufgrund der Entwicklung in den Bereichen Big Data und Künstliche Intelligenz sehr beliebt geworden ist.

Zudem steigt die Produktivität der Entwickler, die nun keine geschweiften Klammern mehr tippen müssen – zumal diese in manchen Tastaturlayouts relativ schwer erreichbar sind. Und außerdem werden Klammern von Entwicklern generell als eher lästig empfunden – vor allem in Lisp-Derivaten wie Clojure, wo ebenfalls bereits Überlegungen angestrengt werden, die (in diesem Fall runden) Klammern loszuwerden.

Wer allerdings mit Java 17 noch nicht auf die klammerlosen Blöcke umstellen kann oder will, kann dem Compiler dies mit dem Kommandozeilenparameter -blockstyle:braces mitteilen.

Dass es für diese Sprachanpassung kein Feature-Preview gab war Absicht. Dazu Goetz weiter: „We wanted to surprise the Java developer community with the gift of this great new feature!“.

Quellen:

Zurück zur Übersicht

3 Kommentare zu “Java 17: Blöcke ohne geschweifte Klammern

  1. ;-) hätt ich mal besser auf’s Datum geschaut. Aber gut geschrieben…

  2. Finde ich keine gute Entscheidung Klammern wegzulassen. Es passiert so viel leichter, dass man z.B. versehentlich die letzte Einrückung im else-Block weglöscht. Außerdem gehen Einrückungen oft beim Kopieren von Codeschnipseln aus Dokumenten verloren. Ohne Klammern darf man dann mühsam nacharbeiten.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*