Normalerweise codiere ich entweder in c # oder in Objective-C und habe es mir kürzlich zur Aufgabe gemacht, die neue Programmiersprache von Apple - Swift - zu lernen.
Das Erste, was mir aufgefallen ist, ist, dass Sie keine Semikolons hinzufügen müssen, um eine Zeile in Swift zu beenden, aber wenn Sie dies tun - zumindest nach dem, was ich getestet habe -, wird der Compiler nicht beeinträchtigt.
Wenn ich schreibe:
int someNumber = 0;
In Objective-C teilt das Semikolon dem Programm mit, dass die Zeile abgelaufen ist und nicht bis zur nächsten Zeile durchgefallen werden soll.
Mit Swift kann ich eine Variable mit deklarieren
var someNumber:Int = 5
und kein Semikolon hinzufügen und das System weiß, dass dies das Ende der Zeile ist.
Was erlaubt es einigen Sprachen, dies zu tun und anderen nicht? Warum nicht ein einheitliches System zum Hinzufügen des Semikolons am Ende beibehalten?
Antworten:
Robert gab eine gute Antwort in Bezug auf Swift. Ich werde versuchen, ein bisschen mehr über das Parsen im Allgemeinen und warum man Semikolons verwendet oder nicht, hinzuzufügen.
Wenn Sie das Programm kompilieren, müssen Sie mehrere Schritte ausführen, bevor Ihre Quelldatei in ausführbaren Code umgewandelt wird. Einer der ersten Schritte ist das Lesen und Parsen . Während der Syntaxanalyse wird Ihr Code aus einer Folge von Zeichen in eine strukturierte Darstellung umgewandelt, die der Grammatik der Sprache entspricht. Dazu ist es notwendig, dass die Elemente, aus denen sich Ihr Code zusammensetzt (Variablen, Konstanten, Deklarationen usw.), irgendwie identifiziert und getrennt werden. Wenn Sie eine Erklärung abgeben wie:
Es ist nur eine Folge von Zeichen, die irgendwie auf das Konzept "ein Ding namens
someNumber
Typ erstellenint
und ihm zuweisen0
" umgestellt werden müssen .Dies erfordert die Identifizierung, wo genau die Anweisung beginnt und endet. Stellen Sie sich vor, Sie hätten folgendes:
Sie müssen wissen, dass dies zwei verschiedene Erklärungen sind. Die
;
in C-ähnlichen Sprachen wird dafür verwendet, so dass der Parser die Zeichen liest, bis er eine findet, und versucht zu verstehen, was gerade als einzelne Anweisung gelesen wurde. Dies erlaubt, wie Robert sagte, mehrere Aussagen in derselben Zeile zu haben, wie:Was genau den gleichen Effekt hat, als würde man sie in zwei Zeilen schreiben.
In anderen Sprachen wie Python müssen Sie jede Anweisung in eine andere Zeile setzen.
Sie müssen also kein hinzufügen
;
, da die Sprache selbst Sie daran hindert, Anweisungen in derselben Zeile hinzuzufügen!Wieder andere Sprachen, wie LISP oder Scheme , haben eine ganz andere Art, Anweisungen zu gruppieren (ok, sie sind keine wirklichen Anweisungen, aber lassen Sie uns das vorerst ignorieren). Sie haben also nur Klammern für alles:
Auch hier müssen Sie nicht das ,
;
nur weil man die gleichen Symbole verwenden ()
,(
) für Dinge , die in anderen Sprachen sind{
,}
,:
etc. Jemand, der Sie kennt nur Lisp Syntax vielleicht fragen: Warum brauchen Sie;
Aussagen am Ende Ihrer ?Nur um ein fremdes Beispiel hinzuzufügen: OCaml hat nicht nur ein Semikolon am Ende der Anweisungen ... es hat zwei!
Warum? Ich weiß es nicht. :)
Unterschiedliche Sprachen werden mit unterschiedlichen Zwecken und unterschiedlichen Philosophien entworfen. Wenn alle Sprachen dieselbe Syntax und dieselben Konventionen hätten, könnten Sie wahrscheinlich nur dieselben Dinge auf dieselbe Weise tun.
quelle
Zeilenumbrüche werden anstelle von Semikolons verwendet, um das Ende einer Anweisung abzugrenzen.
Im Sprachführer: Die Grundlagen heißt es:
Warum? Denn so wollten es die Sprachdesigner machen.
Der zweite Satz oben gibt an, warum Sie keine Semikolons benötigen. Die meisten Aussagen sind einzeilig. Beachten Sie dieses Beispiel für die Blasensortierung. Die Kombination aus einzeiligen Anweisungen und keinen Semikolons sorgt für eine sehr saubere Syntax, die VB-ähnlich, aber weniger ausführlich ist:
Da Anweisungen in Swift normalerweise mit einem Zeilenumbruch enden, werden Semikolons weniger benötigt, um das Ende einer Anweisung zu markieren. Andere Sprachen, die Semikolons verwenden, funktionieren nicht so. Sie können mehrzeilige Anweisungen frei schreiben. Der Compiler weiß jedoch nur, dass die Anweisung beendet wurde, wenn Sie das Semikolon am Ende der Anweisung einfügen.
Wenn Anweisungen nicht mit einem Zeilenumbruch enden, müssen Sie den Zeilenumbruch an eine Stelle setzen, die der Swift-Compiler als Fortsetzung der vorherigen Zeile erkennen kann:
quelle