Syntaktischer Zucker

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Dieser Artikel oder nachfolgende Abschnitt ist nicht hinreichend mit Belegen (beispielsweise Einzelnachweisen) ausgestattet. Die fraglichen Angaben werden daher möglicherweise demnächst entfernt. Bitte hilf der Wikipedia, indem du die Angaben recherchierst und gute Belege einfügst. Näheres ist eventuell auf der Diskussionsseite oder in der Versionsgeschichte angegeben. Bitte entferne zuletzt diese Warnmarkierung.

Syntaktischer Zucker sind Syntaxerweiterungen in Programmiersprachen, welche der Vereinfachung von Schreibweisen dienen. Diese Erweiterungen sind alternative Schreibweisen, die aber nicht die Ausdrucksstärke und Funktionalität der Programmiersprache erweitern.

Syntaktischer Zucker lässt sich durch reine Textumformungen auf Grundelemente der Sprache zurückführen („desugar“, dt. entsüßen).

Der Begriff syntactic sugar wurde von dem britischen Informatiker Peter J. Landin[1] geprägt.

Beispiele[Bearbeiten]

Syntaktischer Zucker in C[Bearbeiten]

Ein Beispiel für syntaktischen Zucker ist die Behandlung von Feldern in der Programmiersprache C. C unterscheidet streng genommen nicht zwischen Zeigern auf Objekte und Zeigern auf Felder von Objekten. Ist die Variable p vom Typ „Zeiger auf Byte“ (Typ char *), so kann man mit *(p+3) auf das dritte Byte im Speicher nach der Adresse p zugreifen. Dies kann man in C auch kurz schreiben als p[3].

Ein weiteres Beispiel für syntaktischen Zucker ist die Infixnotation. Bei der Infix-Schreibweise steht der Operator zwischen den Operanden, z. B. 3 + 5. Dies kann von einem Übersetzer direkt in die klassische Schreibweise eines Funktionsaufrufes add(3,5) übertragen werden.

do-Notation in Haskell[Bearbeiten]

In der funktionalen Programmiersprache Haskell werden für viele Zwecke, insbesondere jedoch die Ein-/Ausgabe sogenannte Monaden verwendet. Um beispielsweise eine Zeile und einen Buchstaben von der Standardeingabe einzulesen, den Buchstaben vorne an die Zeile anzuhängen und das Ergebnis wieder auszugeben, müsste man schreiben

getLine >>= \s -> getChar >>= \c -> putStrLn (c:s)

Besser umbrochen ergibt das:

      getLine >>=
\s -> getChar >>=
\c -> putStrLn (c:s)

Da man solche Konstrukte sehr häufig benötigt, wurde die sogenannte do-Notation eingeführt. Folgender Code ist exakt äquivalent zum obigen Beispiel:

do
    s <- getLine
    c <- getChar
    putStrLn (c:s)

Diese Form erinnert stark an ein imperatives Programm und lässt ein Verständnis des Inhalts einfacher zu.

Syntaktisches Salz[Bearbeiten]

Das Gegenstück zum syntaktischen Zucker ist das syntaktische Salz – eine Spracheigenschaft, die das Schreiben schlechten oder schlecht lesbaren Codes erschwert, ohne dabei die Funktionalität zu erweitern.

  1. exit(0); ein Funktionsaufruf zum Beenden
  2. return(0); eine Schreibweise als handele es sich ebenfalls um einen Funktionsaufruf

Auch muss man in manchen Sprachen eine Schleife oder bedingte Verzweigung mit end while bzw. end if statt eines einfachen end beenden (z. B. bei SPSS). Dies hat den Vorteil, dass der Programmierer sofort erkennt, auf welchen Funktionsblock sich diese end-Anweisung bezieht.

Einzelnachweise[Bearbeiten]

  1. Edsger W. Dijkstra weist in seinem "Tripreport" darauf hin, dass der Begriff auf Peter Landin zurückzuführen ist.