2010-11-13 9 views
5

¿Por qué es ilegal que las variables comiencen con números? Sé que es una convención, pero ¿cuál es el motivo?¿Por qué es ilegal que las variables comiencen con números?

Editar: me refiero a variables como "1foo" o "23bar" no sólo los números como "3"

+7

tal vez porque entonces sería posible escribir, por ejemplo 2 = 3 :) – Ozzy

+1

En muchos idiomas esto no es una opción (no _debe_) - es ilegal iniciar un nombre de variable con un número. – Oded

+0

@Oded: Por favor dígame el verbo adecuado para reemplazar con "should" .my English no es tan bueno :) –

Respuesta

0

En idiomas como Prolog, Erlang y algunas versiones anteriores de Fortran, casi tiene que hacer esto, por razones completamente diferentes.

Prolog/Erlang no tienen asignación de variable, tienen unificación. IIRC, si X es una variable, el código siguiente 2 = X, o X = 2 se procesa si X puede tener el valor 2. Entonces, si X ya está unificado con un valor, entonces ese valor debe ser 2, y si no, X se convierte en 2 de luego encendido. Así que escribir 3 = 3 está bien - debería convertirse en no-operativa, y 2 = 3 siempre falla, ya sea una falta de coincidencia en Prolog o (creo) un error de tiempo de ejecución en Erlang. Los números se comportan como variables que ya se han unificado con el valor que representan los números.

En Fortran temprano (se disculpa por no haber usado fortran en veinte años y olvidar su sintaxis), todos los argumentos de funciones se pasaron por referencia, por lo que si tiene una función equivalente a void foo (int &x) { x = 3; } y la llamó con un número, el compilador almacenaría el número en una variable estática y lo pasaría. Entonces, llamar foo (2) establecería ese valor almacenado estático de 2 a 3. Si sucediera usar la misma variable estática para el literal 2 en alguna otra parte, como llamar a otra función con el literal 2, entonces el valor pasado a la segunda función sería 3 en cambio.

Para que pueda tener variables que son sintácticamente idénticas a los números, siempre que se inicialicen automáticamente al valor del literal. Pero si permites que sean variables mutables y más bien puras, la rareza abunda.

6

Debido a que el analizador léxico en la mayoría de idiomas asumirá que está tratando de especificar un literal numérico. Y luego podría declarar variables que son indistinguibles de literales numéricos, creando una enorme bomba de ambigüedad.

+1

sin duda confundirá el lexer para la mayoría de los idiomas, ¡poco después de confundir al programador! –

+0

¡Todos ganan! Err ... está confundido. Quiero decir, espera. ¿Cuáles fueron esas palabras que escribiste sobre cosas y cosas? – cdhowie

1

Los números se interpretan 'tal cual' sin ninguna sintaxis mientras que las cadenas/caracteres se representan principalmente con comillas.

Por lo tanto, el programa puede entender la diferencia entre un nombre de variable que contiene caracteres y una cadena de caracteres, pero no pasa lo mismo con los números.

3

Pop quiz: en un lenguaje hipotético que permite que una variable comience con un número, ¿qué es esto?

0xDEADBEEF 

En C (y en los idiomas relacionados) esto solo puede ser un número hexadecimal. Si un idioma permite que un nombre de variable comience con un dígito, podría ser una variable o un número hexadecimal. Ese es un ejemplo rápido de potencialmente millones.

+0

+1 Buen ejemplo; Ni siquiera pensé en literales hexadecimales. – cdhowie

+3

Esa sería una variable de solo lectura a la que se le asigna automáticamente un valor de 3735928559. –

1

Una de las razones, probablemente la más obvia, es que haría su vida más difícil, sin aportar nada razonablemente útil para la mesa. Por ejemplo, en C, no sería capaz de decir si una cadena de dígitos es un identificador o un literal numérico.

int 10 = 15; 
int 15 = 10 + 5; 

En la segunda línea, ¿10 es una variable que contiene el literal numérico 15 o es el literal numérico 10?

Otra razón es que permitir que un nombre de variable comience con un dígito hace que la comprobación de errores durante la compilación sea mucho más complicada, una vez más, sin aportar nada razonablemente útil a la tabla.

+0

G: +1. Aquí están tus primeros 10 puntos. Bienvenido a Stackoverflow! – augustin

+0

Gracias por su bienvenida Augustin. Bueno estar aquí. –

Cuestiones relacionadas