Was erlaubt es einigen Sprachen, dies zu tun und anderen nicht? Warum nicht ein einheitliches System zum Hinzufügen des Semikolons am Ende beibehalten?
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:
int someNumber = 0;
Es ist nur eine Folge von Zeichen, die irgendwie auf das Konzept "ein Ding namens someNumber
Typ erstellen int
und ihm zuweisen 0
" umgestellt werden müssen .
Dies erfordert die Identifizierung, wo genau die Anweisung beginnt und endet. Stellen Sie sich vor, Sie hätten folgendes:
int someNumber = 0;
int otherNumber = 1;
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:
int someNumber = 0; int otherNumber = 1;
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.
x = 3
if x < 10:
print 'x smaller than 10'
else:
print 'x is bigger than 10 or equal'
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:
(define (do-stuff x)
(begin
(display (format "value: ~a" x))
x))
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!
let rec fact x =
if x <= 1 then 1 else x * fact (x - 1);;
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.