JavaRush /Blog Java /Random-ES /Variables globales en Java: ¿Cuándo usarlas?
Анзор Кармов
Nivel 31
Санкт-Петербург

Variables globales en Java: ¿Cuándo usarlas?

Publicado en el grupo Random-ES
¡Hola! En este artículo hablaremos sobre variables globales, su declaración y ejemplos de uso apropiado. Una pequeña nota: no consideraremos variables de clase globales, es decir, aquellas a las que se puede acceder dentro de cualquier clase. Hablaremos de las variables globales de toda la aplicación, aquellas a las que se puede acceder dentro de toda la aplicación. Variables globales en Java: ¿Cuándo usarlas?  - 1

Cómo crear variables globales

Las variables globales son variables a las que se puede acceder desde cualquier lugar de la aplicación. En otras palabras, su alcance es la aplicación completa. Para crear una variable de este tipo en Java, necesita crear una variable estática pública en una clase pública:
public class Example {
    public static int a;
    public static int b;
    public static String str;
}
Las variables a, by str- se han vuelto globales. Podemos acceder a ellos directamente desde otras clases dentro de la aplicación:
public class GlobalVarsDemo {
    public static void main(String[] args) {
        Example.a = 4;
        Example.b = 5;
        Example.str = "Global String variable value";

        System.out.println(Example.a);
        System.out.println(Example.b);
        System.out.println(Example.str);
    }
}
Si ejecutamos el método main, veremos el siguiente resultado:

4
5
Global String variable value
Las variables globales se pueden dividir en 2 tipos:
  • variables que se pueden editar;
  • variables que sólo se pueden leer.
Estas últimas se denominan constantes globales. Para crear una constante global, debe crear una variable finaly asignarle un valor al definir la variable:
public class Constants {

    public static final double PI = 3.1415926535897932384626433832795;
    public static final String HELLO_WORLD_STR = "Hello, World!";

}
Según la convención de nomenclatura de Java, todas las constantes deben nombrarse en mayúsculas, separando las palabras con un carácter de subrayado. Entonces, hemos creado constantes y ahora no podremos cambiar sus valores: Variables globales en Java: ¿Cuándo usarlas?  - 2sin embargo, podemos leer sus valores:
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println(Constants.HELLO_WORLD_STR);
    }
}
Conclusión:

Hello, World!
public class ConstantsDemo {
    public static void main(String[] args) {
        double r = 10;
        String message = String.format("Площадь круга с радиусом %f=%f", r, getCircleSquare(r));
        System.out.println(message);

    }

    static double getCircleSquare(double r) {
        return Constants.PI * r * r;
    }
}
Conclusión:

Площадь круга с радиусом 10,000000=314,159265

¿Deberías utilizar variables globales?

Hay muchos artículos en Internet cuyo mensaje principal es el siguiente: las variables globales son malas, malas y terribles. ¿Es realmente? Intentemos dar los pros y los contras de las variables globales para que cada uno pueda sacar su propia conclusión. Variables globales en Java: ¿Cuándo usarlas?  - 3Empecemos por las desventajas. Imaginemos una aplicación que tiene una clase con variables globales que se pueden leer y editar. Con el tiempo, crece la cantidad de clases en el proyecto, la cantidad de variables globales y métodos que usan variables globales, o en otras palabras, dependen de ellas. Con el tiempo, cada variable global se lee en diferentes partes del sistema para diferentes propósitos. El valor de una variable se puede actualizar en diferentes partes del sistema. El panorama general del mundo de esta aplicación se vuelve mucho más complicado, lo que conlleva las siguientes desventajas :
  1. Legibilidad reducida y mayor dificultad para comprender el código.
  2. Mayor complejidad del mantenimiento del código.
  3. Para cambiar una variable global, es necesario analizar todo el código para no establecer la variable en un valor que no sea válido para otras partes del sistema.
  4. Aumento de errores muy difíciles de depurar.

    Imaginemos una variable global, una matriz de objetos. En una parte del sistema, por ejemplo, se esperan cadenas en esta matriz, y en otra parte del sistema, alguien decidió usar números de punto flotante. Es poco probable que alguien quiera entender esto.

  5. Los nombres de las variables pueden ser los mismos si usa variables globales en su código, así como algunas bibliotecas que, a su vez, también usan variables globales. Esto puede provocar errores tanto en el lado de la aplicación como en el lado de la biblioteca que está utilizando.
  6. Aumenta la conectividad entre diferentes partes del sistema que utilizan variables globales. Por el contrario, debe esforzarse por lograr un acoplamiento flexible del código. Es mejor tener muchos subsistemas pequeños conectados entre sí que tener una sola cosa pesada. Porque es más fácil para el cerebro lidiar con varias cosas simples que con una demasiado compleja y confusa.
  7. Escribir pruebas unitarias se vuelve más difícil porque la prueba no sabe qué variables globales se necesitan y cómo deben inicializarse.
  8. En aplicaciones multiproceso, el uso de variables globales por diferentes subprocesos provoca un aumento de errores difíciles de depurar y un aumento de la complejidad del proyecto. Por ello, es necesario configurar más correctamente el acceso a dichas variables, dotándolas de sincronizaciones y bloqueos. Esto puede provocar cortocircuitos en el futuro. Por ejemplo, el subproceso A ha bloqueado la variable X para su trabajo y el subproceso B ha bloqueado la variable Y para su trabajo, y el subproceso A ahora necesita la variable Y y el subproceso B necesita la variable X. Como resultado, el programa se bloqueará.
Pero todo esto es inexacto. Esta es una descripción de los riesgos, cuya probabilidad aumenta a medida que crece el proyecto y aumenta el número de variables globales en él. Pasemos a los profesionales :
  1. En proyectos pequeños, las variables globales son lo más sencillo para que el proyecto funcione.
  2. A veces, el miedo a utilizar variables globales conduce a una complejidad aún mayor en el proyecto. Luego, los programadores comienzan a crear singletons y a recurrir a otros patrones de diseño.
  3. En programación, a menudo es necesario confiar en algunos valores inmutables.

    Lo más razonable es escribir dichos valores como una constante, porque sólo las constantes garantizan que el valor de una variable no cambiará con el tiempo. Estas constantes se pueden encontrar todo el tiempo ( Integer.MAX_VALUE, Integer.MIN_VALUE, Boolean.TRUE, Collections.EMPTY_LISTetc.). Pero la programación no se limita al uso de bibliotecas estándar. A menudo sucede que necesita escribir algún tipo de lógica única, que deberá basarse en sus propias constantes únicas. Es por eso que a veces el uso de constantes (variables globales de solo lectura) realmente hace la vida más fácil.

En general, no se debe abusar de las variables globales; si es posible, utilice sólo constantes. Como se mencionó anteriormente, usar variables globales en proyectos pequeños no es malo. Pero es mejor para un desarrollador novato no usarlos en absoluto. Por dos razones:
  1. Todo lo que escribe un desarrollador novato es esencialmente un pequeño proyecto. Y usar variables globales en sus proyectos le enseñará a usar variables globales en todas partes.
  2. Es mejor aprender primero a prescindir de los "trucos prohibidos". Y con la experiencia, la comprensión de cuándo es apropiado utilizar tales técnicas llegará por sí sola.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION