Cosa consente ad alcune lingue di farlo e altre no? Perché non mantenere un sistema uniforme di aggiunta del punto e virgola alla fine?
Robert ha dato una buona risposta riguardo Swift, proverò ad aggiungere qualcosa in più sull'analisi in generale e sul perché usare o meno i punti e virgola.
Quando compili il programma, ci sono diversi passaggi prima che il tuo file sorgente venga trasformato in codice eseguibile, uno dei primi che legge e analizza . 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 personaggi che in qualche modo deve essere trasformata nel concetto "crea una" cosa "chiamata someNumber
di tipo int
e assegnagli 0
" .
Ciò richiede l'identificazione del punto esatto in cui inizia e termina la frase. Immagina se avessi questo:
int someNumber = 0;
int otherNumber = 1;
Dovresti sapere che quelle sono due dichiarazioni diverse. I ;
linguaggi simili a C sono usati per questo, quindi il parser legge i caratteri fino a quando non ne trova uno, e tenta di capire ciò che è stato appena letto come una singola istruzione. Ciò consente, come ha detto Robert, di avere diverse dichiarazioni nella 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 inserisca ogni istruzione 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 un ;
, perché la lingua stessa ti impedisce di aggiungere istruzioni nella stessa riga!
Eppure altre lingue, come LISP o Scheme , hanno un modo molto diverso di raggruppare le dichiarazioni (ok, non sono in realtà affermazioni, ma ignoriamolo per ora). Quindi hai solo parentesi per tutto:
(define (do-stuff x)
(begin
(display (format "value: ~a" x))
x))
Anche in questo caso, non è necessario il ;
solo perché si utilizzano gli stessi simboli ( )
, (
) per le cose che in altre lingue sono {
, }
, :
, ecc Qualcuno che conosce solo la sintassi Lisp potrebbe chiedere: Perché avete bisogno ;
alla fine delle sue dichiarazioni ?
Solo per aggiungere un esempio sconosciuto: OCaml non ha solo un punto e virgola alla fine delle dichiarazioni ... ne ha due!
let rec fact x =
if x <= 1 then 1 else x * fact (x - 1);;
Perché? Non lo so. :)
Lingue diverse sono progettate con scopi e filosofie diverse. Se tutte le lingue condividessero la stessa sintassi e convenzioni, probabilmente ti permetterebbero di fare le stesse cose allo stesso modo.