¿Qué permite que algunos idiomas hagan esto y otros no? ¿Por qué no mantener un sistema uniforme de agregar el punto y coma al final?
Robert dio una buena respuesta con respecto a Swift, intentaré agregar un poco más sobre el análisis en general y por qué usar o no punto y coma.
Cuando compila el programa, hay varios pasos antes de que su archivo fuente se convierta en código ejecutable, uno de los cuales es leer y analizar . Durante el análisis, su código se transforma de una secuencia de caracteres en una representación estructurada de acuerdo con la gramática del lenguaje. Para esto es necesario que los elementos que componen su código (variables, constantes, declaraciones, etc.) se identifiquen y separen de alguna manera. Cuando haces una declaración como:
int someNumber = 0;
Es solo una secuencia de personajes que de alguna manera necesita ser dirigida al concepto "crear una 'cosa' llamada someNumber
de tipo int
y asignarla 0
" .
Esto requiere identificar exactamente dónde comienza y termina la declaración. Imagina si tuvieras esto:
int someNumber = 0;
int otherNumber = 1;
Necesitaría saber que esas son dos declaraciones diferentes. El ;
en C-como idiomas se utiliza para eso, por lo que el analizador lee los caracteres hasta que encuentra uno, y los intentos de comprender lo que acaba de leer como un solo estado. Esto permite, como dijo Robert, tener varias declaraciones en la misma línea, como:
int someNumber = 0; int otherNumber = 1;
Lo que tiene exactamente el mismo efecto que escribirlos en dos líneas.
En otros lenguajes, como Python , se espera que coloque cada declaración en una línea diferente.
x = 3
if x < 10:
print 'x smaller than 10'
else:
print 'x is bigger than 10 or equal'
Por lo tanto, no hay necesidad de agregar un ;
, ¡porque el lenguaje en sí mismo le impide agregar declaraciones en la misma línea!
Sin embargo, otros idiomas, como LISP o Scheme , tienen una forma muy diferente de agrupar enunciados (está bien, en realidad no son enunciados, pero ignoremos eso por ahora). Entonces solo tienes paréntesis para todo:
(define (do-stuff x)
(begin
(display (format "value: ~a" x))
x))
Una vez más, no es necesario el ;
sólo porque se utilizan los mismos símbolos ( )
, (
) para las cosas que están en otros idiomas {
, }
,:
, etc. Alguien que sólo conoce la sintaxis Lisp podría preguntar: ¿Por qué necesita ;
al final de sus declaraciones ?
Solo para agregar un extraño ejemplo: OCaml no solo tiene un punto y coma al final de las declaraciones ... ¡tiene dos!
let rec fact x =
if x <= 1 then 1 else x * fact (x - 1);;
¿Por qué? No lo sé. :)
Se diseñan diferentes idiomas con diferentes propósitos y diferentes filosofías. Si todos los idiomas compartieran la misma sintaxis y convenciones, probablemente solo le permitirían hacer las mismas cosas de la misma manera.