www.wikidata.de-de.nina.az
Automatic semicolon insertion englisch fur automatische Semikolon Einfugung kurz ASI bezeichnet ein Verhalten des JavaScript Parsers Die meisten Anweisungen in JavaScript werden durch ein Semikolon abgeschlossen In vielen Fallen muss dieses Semikolon jedoch nicht explizit im Quelltext angegeben werden da es der Parser von sich aus erganzt Das Verhalten ist umstritten da es einerseits das Programmieren erleichtert indem viele Semikola ausgelassen werden konnen andererseits in Spezialfallen zu unerwartetem Verhalten und damit zu schwer zu entdeckenden Programmierfehlern fuhren kann Inhaltsverzeichnis 1 Definition 1 1 Details 2 Beispiele 3 Bewertung 4 EinzelnachweiseDefinition BearbeitenDie automatic semicolon insertion ist im ECMAScript Standard festgelegt und gilt damit neben JavaScript auch fur ActionScript In den folgenden Fallen fugt der Parser automatisch ein Semikolon ein 1 Der Parser stosst auf ein unerwartetes Token und dieses Token ist eine schliessende geschweifte Klammer oder es ist vom vorherigen Token durch mindestens einen Zeilenumbruch getrennt Der Parser stosst an das Ende des Quelltextes obwohl die Grammatik dies nicht erlaubt Der Parser stosst auf ein Token das vom vorherigen Token durch einen Zeilenumbruch getrennt ist das mit diesem aber eine Anweisung bilden wurde innerhalb der ein Zeilenumbruch explizit verboten ist Dies trifft etwa auf span class k return span span class w span span class nx rueckgabewert span zu hier ist zwischen dem Schlusselwort return und dem Ruckgabewert kein Zeilenumbruch erlaubt Das Semikolon wird vor dem unerwarteten Token bzw vor dem Ende des Quelltextes eingefugt Ein Semikolon das nach diesen Regeln automatisch eingefugt wurde wird dennoch nicht eingefugt falls einer der beiden folgenden Falle zutrifft Das eingefugte Semikolon bildet eine leere Anweisung Das eingefugte Semikolon wird eines der beiden Semikola im Kopf einer For Schleife Details Bearbeiten Bei einzeiligen Kommentaren gehort der Zeilenumbruch der den Kommentar abschliesst nicht zum Kommentar dazu stellt also einen Zeilenumbruch im Sinne der obigen Regeln dar Mehrzeilige Kommentare werden ebenfalls wie Zeilenumbruche behandelt Das eingefugte Semikolon steht nach dem Zeilenumbruch wahrend ein explizit angegebenes Semikolon meist ans Ende der Zeile gesetzt wird dies macht jedoch fur den Parser keinen Unterschied Die Anweisungen in denen ein Zeilenumbruch verboten ist sind die Postinkrement und dekrementoperatoren continue und break mit Label sowie return und throw mit Ruckgabewert Mit der Version 6 von ECMAScript kommen noch yield und die Pfeilnotation hinzu Beispiele BearbeitenIn den folgenden Beispielen stehen a b c und d fur Variablen foo bar und baz fur Funktionen und print fur eine Methode von Zahlen Der Normalfall fur den die automatic semicolon insertion gedacht ist zeigt sich im folgenden Code foo bar baz Dies widerspricht eigentlich der Syntax von ECMAScript wird aber durch das automatische Einfugen von Semikola zu folgendem korrektem Code foo bar baz In folgendem Code wird kein Semikolon erganzt a b c d Der Code ist namlich gultig ohne dass bei den Zeilenumbruch Semikola erganzt werden Dies erlaubt es lange Codezeilen auf mehrere Zeilen zu verteilen In einigen Fallen fuhrt das Weglassen von Semikola zu Syntaxfehlern wenn diese nicht wie erwartet erganzt werden if a gt b else c d Hier wird nach der ersten Zeile kein Semikolon erganzt da dieses eine leere Anweisung ergeben wurde Damit verursacht das else einen Syntaxfehler Zur Korrektur musste das Semikolon oder ein leerer Block explizit erganzt werden Naturlich konnte die if Konstruktion in diesem Fall auch umgestellt werden um das Problem zu vermeiden Ein problematisches Verhalten der automatic semicolon insertion zeigt sich im folgenden Beispiel return a b Da direkt nach return kein Zeilenumbruch zulassig ist ist dieser Code gleichbedeutend zu return a b Statt der Summe a b wird also nichts undefined zuruckgegeben Dieser Fehler kann leicht ubersehen werden Wird ein langer Ruckgabewert also auf mehrere Zeilen aufgeteilt so muss der Anfang in der gleichen Zeile wie return stehen folgender Code ware korrekt return a b Ein ahnlich unerwarteter Fehler entspringt dem folgenden Code a b c c d print Hier sollte eigentlich in zwei Anweisungen zunachst die Summe b c in a gespeichert werden dann die print Methode auf die Summe c d angewendet werden Tatsachlich aber wird zwischen den beiden Zeilen kein Semikolon erganzt da die Syntax auch ohne dieses stimmt Der Code wird also behandelt wie a b c c d print Es wird also versucht c als Funktion mit dem Argument c d aufzurufen vom Ruckgabewert die Methode print aufzurufen und dieses Ergebnis zu b zu addieren um diese Summe in a zu speichern Dies wird hochstwahrscheinlich einen Laufzeitfehler auslosen in jedem Fall aber nicht zum erwarteten Ergebnis fuhren Ein ahnliches Problem kann sich ergeben wenn eine Zeile mit einem regularen Ausdruck beginnt der mit der vorherigen Zeile als Division interpretiert werden kann Bewertung BearbeitenDouglas Crockford bezeichnet die automatic semicolon insertion als einen furchtbaren Designfehler von JavaScript und empfiehlt von wenigen Ausnahmen abgesehen das Semikolon immer explizit anzugeben 2 JSLint und ahnliche Hilfsmittel zur Stilkontrolle warnen in der Regel wenn ein Semikolon automatisch eingefugt wurde Auf der anderen Seite gibt es auch Programmierer die die automatic semicolon insertion gerne nutzen Um unerwartete Fehler zu vermeiden konnen Zeilen die mit einer Klammer oder einem regularen Ausdruck beginnen ein Semikolon vorangestellt werden 3 So wird vermieden dass nach dem Verschieben von Codezeilen an eine andere Stelle ein ursprunglich explizit gesetztes Semikolon nicht mehr an der notwendigen Stelle steht Einzelnachweise Bearbeiten Ecma 262 Edition 5 1 The ECMAScript Language Specification 7 9 Automatic Semicolon Insertion Douglas Crockford Das Beste an JavaScript O Reilly Verlag 2008 ISBN 978 3 89721 876 5 S 103 109f 127f inimino JavaScript Semicolon Insertion Everything you need to know Memento des Originals vom 2 Oktober 2017 im Internet Archive nbsp Info Der Archivlink wurde automatisch eingesetzt und noch nicht gepruft Bitte prufe Original und Archivlink gemass Anleitung und entferne dann diesen Hinweis 1 2 Vorlage Webachiv IABot inimino org Veroffentlicht am 28 Mai 2010 abgerufen am 2 Februar 2015 Abgerufen von https de wikipedia org w index php title Automatic semicolon insertion amp oldid 239054186