Fachkonzept - Ausdruck
Ausdruck als Beschreibung eines Datenwerts und seiner Berechnung
Als Beispiel betrachten wir die Verschlüsselung mit dem Umkehrverfahren. Hier ein konkreter Anwendungsfall:
gegeben: Klartext: "HALLO" gesucht: Geheimtext: "ZOLLAHA"
Den zu berechnenden Datenwert erhält man aus dem vorgegebenen Datenwert mit Hilfe eines Ausdrucks.
> String.append "Z" (String.append (String.reverse "HALLO") "A")
"ZOLLAHA" : String
Der Ausdruck benutzt neben dem vorgegebenen Datenwert "HALLO"
die vordefinierten Funktionen String.reverse
und
String.append
sowie die Konstanten "A"
und "Z"
. Der Aufbau erfolgt dabei nach dem Schachtelungsprinzip.
Den zu berechnenden Datenwert erhält man durch eine Auswertung des Ausdrucks. Hierbei werden die Funktionen schrittweise auf die jeweiligen Datenwerte angewandt.
Durch die Auswertung des Ausdrucks ermittelt man den Wert des Ausdrucks - zusammen mit seinem Datentyp. Dieser Wert ist - wenn der Ausdruck richtig gebildet ist - der zu berechnende Datenwert.
Wir fassen diese erste Sichtweise auf Ausdrücke zusammen. Beachte, dass wir hier nur Ausdrücke mit fest vorgegebenen Daten betrachten. Eine Ausweitung auf beliebige Daten erfolgt in den weiteren Kapiteln.
Wir betrachten den Fall fest vorgegebener Daten. Mit einem Ausdruck beschreibt man ein zu berechnenden Datenwert. Ein Ausdruck nutzt dabei - in Fall fest vorgegebener Daten - Funktionen und Konstanten. Ein Ausdruck liefert zudem ein Verfahren zur Berechnung eines Datenwerts. Mit der Auswertung des Ausdruck durch schrittweises Anwenden der Funktionen bestimmt man den Wert des Ausdrucks (sowie den Datentyp des Ausdrucks). Dieser entspricht bei einem korrekt gebildeten Ausdruck dem zu berechnenden Datenwert.
Operatorrangfolge
Ähnlich der bekannten "Punkt vor Strich"-Regel definieren Programmiersprachen meist weitere Operatorrangfolgen. Die wichtigste Regel in Elm ist, dass Funktionen vor allen anderen Operatoren ausgewertet werden. Deshalb ist z.B. der folgende Ausdruck ungültig:
-- ungültig
not 1 == 1
-- gültig wäre
not (1 == 1)
Die weiteren Operatoren sind so priorisiert, wie es auch in anderen Sprachen üblich ist und wie man es intuitiv auch erwarten würde. Eine offizielle Spezifikation existiert leider nicht, aber im Internet findest du bei Bedarf Darstellungen der Operatorrangfolgen in Elm. In Zweifelsfällen ist es ohnehin besser Klammern zu setzen.