What allows the some languages to do this and others to not? Why not keep a uniform system of adding the semicolon to the end?
Robert ha dato una buona risposta riguardo a Swift, cercherò di aggiungere qualcosa in più sull'analisi in generale e sul perché usare o meno il punto e virgola.
Quando compilate il programma, ci sono diversi passaggi prima che il vostro file sorgente sia trasformato in codice eseguibile, uno dei primi a leggere e parsing . Durante l'analisi, il codice viene trasformato da una sequenza di caratteri in una rappresentazione strutturata in base alla grammatica della lingua. Per questo è necessario che gli elementi che compongono il tuo codice (variabili, costanti, dichiarazioni, ecc.) Siano in qualche modo identificati e separati. Quando fai una dichiarazione come:
int someNumber = 0;
È solo una sequenza di caratteri che in qualche modo deve essere convertita al concetto "crea una 'cosa' chiamata someNumber
di tipo int
e assegna 0
ad essa" .
Ciò richiede l'identificazione di dove inizia e termina esattamente l'affermazione. Immagina se avessi questo:
int someNumber = 0;
int otherNumber = 1;
Dovresti sapere che quelle sono due dichiarazioni diverse. Il ;
in lingue simili a C viene utilizzato per questo, quindi il parser legge i caratteri finché non ne trova uno e tenta di capire ciò che è stato letto come una singola istruzione. Ciò consente, come affermato da Robert, di avere più istruzioni sulla stessa riga, come:
int someNumber = 0; int otherNumber = 1;
Che ha esattamente lo stesso effetto di scriverli in due righe.
In altre lingue, come Python , ci si aspetta che ogni frase venga posta in una riga diversa.
x = 3
if x < 10:
print 'x smaller than 10'
else:
print 'x is bigger than 10 or equal'
Quindi non è necessario aggiungere ;
, perché il linguaggio stesso ti impedisce di aggiungere istruzioni nella stessa riga!
Ancora altre lingue, come LISP o Scheme , hanno un modo molto diverso di raggruppare le affermazioni (ok, non sono realmente dichiarazioni, ma ignoriamolo per ora). Quindi hai solo una parentesi per tutto:
(define (do-stuff x)
(begin
(display (format "value: ~a" x))
x))
Ancora una volta, non hai bisogno di ;
solo perché utilizzi gli stessi simboli ( )
, (
) per le cose che in altri linguaggi sono {
, }
, :
, ecc Qualcuno che conosce solo la sintassi Lisp potrebbe chiederti: Perché hai bisogno di ;
alla fine delle tue dichiarazioni?
Solo per aggiungere un estraneo: OCaml non ha solo un punto e virgola alla fine delle dichiarazioni ... ha due!
let rec fact x =
if x <= 1 then 1 else x * fact (x - 1);;
Perché? Non lo so. :)
Diverse lingue sono progettate con scopi diversi e filosofie diverse. Se tutte le lingue condividessero la stessa sintassi e convenzioni, probabilmente ti permetteranno solo di fare le stesse cose nello stesso modo.