Una constante es una variable cuyo valor puede determinar el compilador
durante la compilación y puede aplicar optimizaciones derivadas de ello. Para
que esto sea posible se ha de cumplir que el valor de una constante no pueda
cambiar durante la ejecución, por lo que el compilador informará con un error
de todo intento de modificar el valor inicial de una constante. Las constantes
se definen como variables normales pero precediendo el nombre de su tipo del
modificador const
y dándoles siempre un valor
inicial al declararlas. O sea,
con esta sintaxis:
const
<tipoConstante> <nombreConstante> = <valor>;
Así, ejemplos de definición de
constantes es el siguiente:
const int a = 123;
const int b = a + 125;
Dadas estas definiciones de
constantes, lo que hará el compilador será sustituir en el código generado
todas las referencias a las constantes a
y b por los valores 123 y 248
respectivamente, por lo que el código generado será más eficiente ya que no
incluirá el acceso y cálculo de los valores de a
y b. Nótese que puede hacer esto
porque en el código se indica explícitamente cual es el valor que siempre
tendrá a y, al ser este un valor
fijo, puede deducir cuál será el valor que siempre tendrá b. Para que el compilador pueda hacer estos cálculos
se ha de cumplir que el valor que se asigne a las constantes en su declaración
sea una expresión constante. Por ejemplo, el siguiente código no es válido en
tanto que el valor de x no es
constante:
int x = 123; // x es una variable normal, no una
constante
const int y
= x +123; // Error: x no tiene porqué tener valor constante (aunque aquí lo
tenga)
Debido a la necesidad de que el
valor dado a una constante sea precisamente constante, no tiene mucho sentido
crear constantes de tipos de datos no básicos, pues a no ser que valgan null
sus valores no se pueden determinar durante la compilación sino únicamente tras
la ejecución de su constructor. La única excepción a esta regla son los tipos
enumerados, cuyos valores se pueden determinar al compilar como se explicará
cuando los veamos en el Tema 14:
Enumeraciones
Todas las constantes son
implícitamente estáticas, por lo se considera erróneo incluir el modificador static
en su definición al no tener sentido hacerlo. De hecho, para leer su valor
desde códigos externos a la definición de la clase donde esté definida la
constante, habrá que usar la sintaxis <nombreClase>.<nombreConstante>
típica de los campos static.
Por último, hay que tener en
cuenta que una variable sólo puede ser definida como constante si se es una
variable local o un campo, pero no si es un parámetro.