Читать книгу JavaScript für Ungeduldige - Cay Horstmann - Страница 62
Hinweis
ОглавлениеOhne ein Semikolon kann es passieren, dass eine Zeile, die mit einem Template-Literal oder einem Literal für einen regulären Ausdruck beginnt, mit der vorausgehenden Zeile verschmolzen wird:
let a = x
`Fred`.toUpperCase()
Hier wird x`Fred` als Tagged-Template-Literal aufgefasst. In der Praxis werden Sie solchen Code aber nie schreiben, denn bei der Arbeit mit einem String oder einem regulären Ausdruck wollen Sie ja das Ergebnis nutzen. Deshalb würden Sie das Literal nicht an den Anfang der Anweisung stellen.
Die zweite Semikolonregel ist jedoch problematischer. Danach wird ein Semikolon hinter einer nichtlinearen Steueranweisung (break, continue, return, throw und yield) ergänzt, auf die unmittelbar ein Zeilentrennzeichen folgt:
return
x + someComplicatedExpression;
Hier wird automatisch ein Semikolon hinzugefügt:
return ;
x + someComplicatedExpression;
Die Funktion springt zurück, ohne einen Wert zurückzugeben. Die zweite Zeile ist jetzt eine Ausdrucksanweisung, die niemals ausgeführt wird.
Die Lösung für dieses Problem ist trivial: Fügen Sie niemals einen Zeilenumbruch nach return ein, sondern stellen Sie mindestens ein Token des Ausdrucks für den Rückgabewert in dieselbe Zeile:
return x +
someComplicatedExpression;
Diese Regel müssen Sie auch dann beachten, wenn Sie gewissenhaft alle erforderlichen Semikolons selbst hinschreiben.
Neben den Regeln zu ungültigen Token und nichtlinearen Steueranweisungen gibt es noch eine dritte, eigenartige Regel: Ein Semikolon wird eingefügt, wenn auf ++ oder -- unmittelbar ein Zeilentrennzeichen folgt. Betrachten Sie folgendes Beispiel:
x
++
y
Daraus wird nach dieser Regel:
x;
++y;
Solange Sie den Operator ++ in dieselbe Zeile schreiben wie seinen Operanden, müssen Sie sich jedoch keine Gedanken über diese Regel machen.
Die Regeln für die automatische Semikolonergänzung sind ein Teil der Sprache. In der Praxis funktionieren sie auch durchaus annehmbar. Wenn Sie Semikolons gern selbst einfügen, dann tun Sie das ruhig, wenn nicht, lassen Sie es bleiben. In jedem Fall aber müssen Sie auf eine Reihe von Grenzfällen achten.