Keywords

Aus MimiPedia

Was ist ein Keyword?

Unter einem Keyword vesteht man in einer Programmiersprache eine Zeichenfolge, die nur mit ganz bestimmter Bedeutung eingesetzt werden darf. So darf das if ausschließlich verwendet werden um ein Konstrukt zur bedingten Ausführung einzuleiten; nicht aber als Bezeichner, auch nicht als Teil eines package-Namens.

Java Keywords

Mit Java 5 kam enum als 50tes Keyword hinzu:

abstract   continue   for          new         switch
assert     default    if           package     synchronized
boolean    do         goto         private     this
break      double     implements   protected   throw
byte       else       import       public      throws
case       enum       instanceof   return      transient
catch      extends    int          short       try
char       final      interface    static      void
class      finally    long         strictfp    volatile
const      float      native       super       while

In Java 9 kam mit dem einzelnen Underscore _ das 51te und bislang letzte Keyword hinzu.

Der Grund für die sparsame Einführung neuer Keywords liegt an den unvermeidlichen Kompilier-Fehlern die beim Update entstehen, wenn das -- bis dahin erlaubte -- Keyword bona fide verwendet wurde. Das ist durchaus problematisch, da die gestörte Abwärts-Komaptibilität zu erhöhtem Aufwand und zu Verzögerungen beim Update führt.

Da aber eine strukturelle Spracherweiterung nur möglich ist, wenn neue Konstrukte eindeutig identifzierbar sind, wurde ein alternativer Weg gefunden der die Abwärts-Kompatibilität nicht gefährdet.

Contextual Keywords

Die Sequenz var wurde in Java 11 eingeführt um Varaiblen deklarieren zu können, deren Typ der Compiler aus dem Kontext bestimmt. So definiert etwa der Ausdruck

var x = "fünf";

eine Variable mit dem Bezeichner x und dem Typ String.

Im Gegensazu zu den Keywords kann var aber weiterhin als Bezeichner genutzt werden. Zumindest der Compiler hat nichts gegen diese Deklaration:

class Var {
    static int var = 5;
    {
        var var = Var.var;
    }
 }

Einzige Einschränkung ist, daß var nicht als Typ-Identifier erlaubt ist, was aber nicht geschieht wenn sich der Coder an die "Sun"-Code-Convention hält.

Mit Java 9 wurden die Sequenzen

open         module      requires    transitive   exports
opens        to          uses        provides     with

im Rahmen von Project "Jigsaw" eingeführt, das neue Java-Modul-Konzept. Die Spec bezeichnet sie als Restricted Keywords.

Erst mit Java 17 wurde in der Java-Spec dafür der Begriff Contextual Keyword geprägt. Java 17 führten die folgenden sequenzen ein:

permits      sealed     non-sealed    record      yield

Mit Ausnahme von non-sealed sind alle Contextual Keywords als Bezeichner -- etwa für Variablen -- verwendbar.

Ungenutzte Keywords

In der Liste der echten Keywords fallen einige auf, die in der normalen Programmierung nicht auftauchen:

const und goto wurden in der ersten Java-Spezifikation definiert, aber niemals mit einer Semantik versehen. Sie können nicht verwendet werden und würden auch nichts tun wenn man es könnte.

_ (der Underscore) wurde präventiv eingeführt, hat auch in Java 21 noch keine Bedeutung erhalten. Er wird vermutlich im Zusammenhang mit dem type pattern matching einmal Bedeutung erhalten.

Nicht-Keywords

Obwohl man das vermuten könnte, sind die Sequenzen true, false und null keine Keywords -- auch keine Kontext-Keywords. Tatsächlich handelt sich bei allen drei um Literale, also Sequenzen die Konstanten definieren.

Dadurch verhalten sich die drei ähnlich wie Keywords, sie können nicht als Bezeichner verwendet werden, auch nicht als Teil eines Package-Bezeichners.