O que permite que algumas línguas façam isso e outras não? Por que não manter um sistema uniforme de adição de ponto e vírgula até o fim?
Robert deu uma boa resposta sobre Swift, tentarei adicionar um pouco mais sobre a análise em geral e por que usar ou não ponto e vírgula.
Quando você compila o programa, há várias etapas antes que seu arquivo de origem seja transformado em código executável, sendo um dos primeiros a leitura e análise . Durante a análise, seu código é transformado de uma sequência de caracteres em uma representação estruturada de acordo com a gramática do idioma. Para isso, é necessário que os elementos que compõem seu código (variáveis, constantes, declarações etc.) sejam identificados e separados de alguma forma. Quando você faz uma declaração como:
int someNumber = 0;
É apenas uma sequência de caracteres que de alguma forma precisa ser transformada no conceito "criar uma 'coisa' chamada someNumber
de tipo int
e atribuir 0
a ela" .
Isso requer identificar onde exatamente a instrução começa e termina. Imagine se você tivesse isso:
int someNumber = 0;
int otherNumber = 1;
Você precisaria saber que essas são duas declarações diferentes. As ;
linguagens do tipo C são usadas para isso, então o analisador lê os caracteres até encontrar um e tenta entender o que foi lido como uma única declaração. Isso permite, como Robert disse, ter várias declarações na mesma linha, como:
int someNumber = 0; int otherNumber = 1;
Que tem exatamente o mesmo efeito que escrevê-las em duas linhas.
Em outros idiomas, como Python , você deve colocar cada instrução em uma linha diferente.
x = 3
if x < 10:
print 'x smaller than 10'
else:
print 'x is bigger than 10 or equal'
Portanto, não há necessidade de adicionar a ;
, porque a própria linguagem impede que você adicione instruções na mesma linha!
No entanto, outros idiomas, como LISP ou Scheme , têm uma maneira muito diferente de agrupar declarações (ok, elas não são realmente declarações, mas vamos ignorá-lo por enquanto). Então você tem apenas parênteses para tudo:
(define (do-stuff x)
(begin
(display (format "value: ~a" x))
x))
Mais uma vez, você não precisa a ;
apenas porque você usar os mesmos símbolos ( )
, (
) para as coisas que em outras línguas são {
, }
, :
, etc. Alguém que só sabe sintaxe Lisp pode perguntar-lhe: Por que você precisa ;
no final de suas declarações ?
Apenas para adicionar um exemplo mais estranho: o OCaml não só possui um ponto-e-vírgula no final das instruções ... ele tem dois!
let rec fact x =
if x <= 1 then 1 else x * fact (x - 1);;
Por quê? Eu não sei. :)
Diferentes idiomas são projetados com diferentes propósitos e diferentes filosofias. Se todos os idiomas compartilharem a mesma sintaxe e convenções, provavelmente permitirão que você faça as mesmas coisas da mesma maneira.