Consejo 5 de Java: constantes de Java

Esta semana creamos algunas constantes que tienen todos los beneficios de usar las instalaciones del preprocesador de C para definir constantes en tiempo de compilación y código compilado condicionalmente.

Java se ha deshecho de toda la noción de un preprocesador textual (si toma Java como un "descendiente" de C / C ++). Sin embargo, podemos obtener los mejores beneficios de al menos algunas de las características del preprocesador de C en Java: constantes y compilación condicional.

Una de las características indiscutiblemente buenas del preprocesador de C es la capacidad de definir constantes en tiempo de compilación utilizando un nombre textual para representar algún valor. Esto hace que sea más fácil de leer y mantener. También es más rápido en tiempo de ejecución que usar una variable normal.

Una característica posiblemente abusada del preprocesador de C es el uso de #define junto con #ifdef y sus amigos para compilar condicionalmente bloques completos de código. Digo que es discutible ya que la gente a menudo usa esta función para lidiar con problemas específicos de la plataforma (y ese es tanto el punto bueno como el malo).

En C, se podrían definir algunas constantes en un archivo de encabezado a través de:

#define MY_BDATE 10 #define SILLY_PLATFORM 

y luego obtener acceso a esas constantes usando #include para incluirlas en un archivo de código, y luego usándolas:

fprintf (stderr, "Mi cumpleaños es el% d" "th! \ n", MY_BDATE); 

El equivalente en Java se puede hacer creando variables finales estáticas públicas en una interfaz Java :

interfaz ConstantStuff {public static final int MY_BDATE = 10; public static final boolean SillyPlatform = true; }

Luego podemos acceder a ellos usando importpara hacer que la interfaz sea visible para nosotros y luego usando las constantes:

System.out.println ("Mi cumpleaños es el" + ConstantStuff.MY_BDATE + "th!"); 

El preprocesador de C puede eliminar condicionalmente grandes áreas de texto si una constante de preprocesador determinada estaba o no definida.

#if definido (SILLY_PLATFORM) / * Mucho código desagradable para lidiar con las estupideces de la plataforma * SILLY. * / #else / * Código para tratar con otras plataformas normales. */ #terminara si

Mucha gente lamenta que esta capacidad esté ausente en Java. Recuerde, una de las razones por las que Java es tan maravilloso es que el lenguaje está mucho mejor definido, por lo que un código específico del sistema como ese ni siquiera debería ser necesario.

Sea como fuere, ¡aún puede obtener ese tipo de código compilado condicionalmente directamente del compilador! Simplemente use constantes booleanas finales estáticas públicas como condición para una declaración if regular . El compilador de Java es lo suficientemente inteligente como para reconocerlo como un caso especial y puede eliminar completamente la prueba y el código de la rama condicional apropiada.

Así que escribe la declaración condicional como de costumbre.

if (ConstantStuff.SillyPlatform) {// Código que se utilizará si la plataforma es verdadera * en el momento de la compilación *. } else {// Código que se utilizará si la plataforma es falsa * en el momento de la compilación *. }

No sé ustedes, pero odio tener que escribir ese nombre de interfaz tan largo antes de usar cualquiera de esas constantes. Entonces, solo tengo mi clase que usará esas constantes para implementar la interfaz . Entonces puedo usar el nombre directamente, asumiendo que no hay conflictos de nombres (en cuyo caso tendrá que distinguirlos usando los nombres completos).

He reunido todas estas cosas divertidas en un par de aplicaciones Java sencillas. Constants (//www.javaworld.com/javatips/javatip5/Constants.java) implementa la interfaz y usa las constantes directamente, mientras que Constants2 (//www.javaworld.com/javatips/javatip5/Constants2.java) usa nombres completos para acceder a las constantes.

John D. Mitchell es otro graduado de Ciencias de la Computación de la UC-Berkeley que ha consumido cafeína, azúcar y muy poco sueño. Pasó tres años trabajando duro en el software de PDA en Geoworks en busca de material que en realidad vale más que el papel tapiz. Salió de su trabajo diario después del primer lanzamiento público de Java para desarrollar applets y un compilador de Java. Financia su adicción a Java escribiendo compiladores, sistemas Tcl / Tk, Perl, C ++ y Java. Su abundante tiempo libre se consume moderando el grupo de noticias comp.lang.tcl.announce y escribiendo un libro de Java impresionante.

Esta historia, "Consejo 5 de Java: constantes de Java" fue publicada originalmente por JavaWorld.