JavaScript/Anweisung

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Ein JavaScript-Programm besteht aus einer Abfolge von Anweisungen (Statements).

Eine Anweisung stellt eine in der Syntax einer Programmiersprache formulierte einzelne Vorschrift dar, die im Rahmen der Abarbeitung des Programms auszuführen ist.
Wikipedia: Anweisung (Programmierung)[1]

In JavaScript kann eine Anweisung eine Deklaration sein, ein Ausdruck oder eine Kontrollstruktur (Verzweigungen und Schleifen). Anweisungen können in einer einzigen Programmzeile aufgeschrieben werden, in den meisten Fällen aber auch auf mehrere Zeilen verteilt werden, um die Lesbarkeit des Programms zu verbessern. Sie können auch mehrere Anweisungen auf eine Programmzeile schreiben (sollten das aber unterlassen, weil die Lesbarkeit des Programms darunter leidet).

Deklarationen können sich auf Variablen, Funktionen oder Klassen beziehen, wozu es eigene Artikel gibt. Die Kontrollstrukturen besprechen wir in den beiden folgenden Artikeln.

Das Semikolon

Grundsätzlich ist es so, dass Anweisungen durch ein Semikolon ; abgeschlossen werden müssen. Diese Vorschrift ermöglicht erst das Verteilen einer Anweisung auf mehrere Zeilen, andernfalls wäre ein Programm nicht eindeutig interpretierbar.

Es gibt aber Ausnahmen:

  • Funktionsdeklarationen und manche Kontrollstrukturen enden mit einem Anweisungsblock. Hinter dessen Abschlussklammer wird kein Semikolon gesetzt.
  • JavaScript war als simple Sprache konzipiert, die ihren Benutzern Fehler verzeihen sollte. Deshalb ergänzt JavaScript an einigen Stellen automatisch ein Semikolon, wenn es glaubt, dass dort eins hingehört, und das führt dazu, dass JavaScript an einigen Stellen verbietet, eine Anweisung auf mehrere Zeilen aufzuteilen. Details finden Sie im Artikel zu automatisch eingefügten Semikolons.

Zuweisung Ausdruck als Anweisung

JavaScript ist, wie alle Sprachen der C-Familie, sehr stark auf die Verwendung von Ausdrücken ausgerichtet. Ein Ausdruck ist ein Sprachkonstrukt, das Werte und Operatoren benutzt, um einen neuen Wert zu ermitteln.

Wenn es nur darum geht, diesen Wert zu erhalten, ist es wichtig, dass dieser Ausdruck frei von Seiteneffekten ist. Das bedeutet, dass seine Auswertung nichts an den Daten verändert, die vom Programm verarbeitet werden. Solche Ausdrücke können beliebig oft aufgerufen werden und liefern immer den gleichen Wert (natürlich mit Ausnahmen, wenn Sie z. B. die Systemzeit abrufen, ist das Ergebnis nicht immer gleich). Solche Ausdrücke ergeben als Anweisung allerdings keinen Sinn. JavaScript akzeptiert sie, aber sie haben keinerlei Effekt.

Ausdrücke, als Anweisung verwendet werden, müssen Seiteneffekte haben. Der wichtigste Seiteneffekt ist die Veränderung einer Variablen, wofür JavaScript den Zuweisungsoperator = anbietet. Weitere Operatoren mit Seiteneffekten sind Inkrement und Dekrement und delete.

Seiteneffekte können auch auftreten, wenn Sie Programmierschnittstellen Ihres Browsers aufrufen. Die Wirkung kann sein, dass sich das angezeigte Dokument verändert, Daten von einem Server abgeholt werden oder dass eine Funktion aufgerufen wird, sobald ein bestimmtes Ereignis eintritt.

Die folgenden Beispiele für Ausdrücke als Anweisung sind nur ein Überblick und können die zugehörigen Themen-Artikel nicht ersetzen.

Allerlei Ausdrücke als Anweisung
Zuweisung einer Konstanten an die Variable zahl:
zahl = 42;
Aufruf der Methode getElementById aus der DOM-Programmierschnittstelle. Das Ergebnis des Funktionsaufrufs ist ein HTML Element, es wird in der Variablen nameElement gespeichert. Dieser Funktionsaufruf hat keine Seiteneffekte:
nameElement = document.getElementById("name")
Aufruf der Methode addEventListener auf dem gefundenen HTML Element. Für das Ereignis 'click' wird eine Behandlungsfunktion registriert. Ein Rückgabewert wird nicht erwartet, dieser Ausdruck hat den Seiteneffekt, dass eine Funktion in einer Liste von Ereignisbehandlern eingetragen wird:
nameElement.addEventListener('click', handleNameClick);
Mit dem Post-Inkrement Operator ++ wird der Wert der Variablen wert um 1 erhöht. Auch hier geht es um den Seiteneffekt:
wert++;
Das letzte Beispiel ruft die Funktion motorSteuerung auf. Sie hat irgendetwas mit einer Motorsteuerung zu tun. Ob sie Seiteneffekte hat? Soll sie den linken Motor auf Leistung 5 einstellen? Soll sie die Drehzahl des fünften Motors auf der linken Seite auslesen? Wir wissen es nicht.
motorSteuerung("links", 5);

Woher soll man nun wissen, ob Aufrufe wie document.getElementById oder htmlElement.addEventListener Seiteneffekte haben oder nicht? Hier hilft nur Handbuchstudium (das Selfhtml-Wiki ist ebenfalls gerne behilflich). Sie müssen die Beschreibung der jeweiligen Funktion lesen und verstehen, welche Aufgabe sie erfüllt. Zumeist ist auch der Name der Funktion eine Hilfe: getElementById oder addEventlistener sagen deutlich, ob hier ein Seiteneffekt eintritt oder nicht. Mit etwas Programmiererfahrung wissen Sie dann, bei welchen Funktionen Sie Seiteneffekte erwarten müssen und bei welchen nicht.

Eine Funktion wie motorSteuerung ist ein Beispiel für eine schlecht benannte Funktion. Ein Name wie setMotorPower oder getMotorSpeed wäre deutlich hilfreicher gewesen. So bleibt uns nur das Handbuch, oder bei einer selbstgeschriebenen und undokumentierten Funktion das Studium des Programmcodes.

Einen Anweisungsblock notieren

Ein Anweisungsblock besteht aus einer oder mehreren Anweisungen, die innerhalb einer übergeordneten Anweisung oder innerhalb einer Funktion stehen.

So können Anweisungsblöcke beispielsweise unterhalb einer bedingte Anweisung oder einer Schleife stehen.

Auch alle Anweisungen, die innerhalb einer selbst definierten Funktion stehen, bilden einen Anweisungsblock.

1
if (Zahl > 1000) {
    Zahl = 0;
  Neustart();
}
2
while (i <= 99) {
  Quadrat(i);
  i = i + 1;
}
3
function SageQuadrat (x) {
  let Ergebnis = x * x;
    alert(Ergebnis);
}
4
function SagEinmaleins (x) {
  let Ergebnis = x * x;
    if(Ergebnis > 100) {
       Ergebnis = 0;
       Neustart();
    }
  alert(Ergebnis);
}

Ein Anweisungsblock wird durch eine öffnende geschweifte Klammer { begonnen und durch eine schließende geschweifte Klammer } beendet.
Sie können die geschweiften Klammern jeweils in eine eigene Zeile schreiben, wie in den obigen Beispielen. Es ist aber auch erlaubt, die Klammern in derselben Zeile zu notieren wie die Anweisungen.

Bei bedingten Anweisungen (wie in Beispiel 1) oder bei Schleifen (wie in Beispiel 2) müssen Sie solche Anweisungsblöcke notieren, sobald mehr als eine Anweisung von der Bedingung oder der Schleifenbedingung abhängig ausgeführt werden soll. Bei Funktionen (wie in Beispiel 3) müssen Sie Anfang und Ende der Funktion durch geschweifte Klammern markieren. Alles, was innerhalb der Funktion steht, ist daher ein Anweisungsblock.

Anweisungsblöcke können auch verschachtelt sein, wie in Beispiel 4 oben.

Weblinks

  1. Wikipedia: Anweisung (Programmierung), abgerufen am 27.04.2023