JavaRush /Java Blog /Random-IT /Variabili globali in Java: quando usarle?
Анзор Кармов
Livello 31
Санкт-Петербург

Variabili globali in Java: quando usarle?

Pubblicato nel gruppo Random-IT
Ciao! In questo articolo parleremo delle variabili globali, della loro dichiarazione ed esempi di utilizzo appropriato. Una piccola nota: non prenderemo in considerazione le variabili di classe globali, cioè quelle a cui è possibile accedere all'interno di una qualsiasi classe. Parleremo delle variabili globali dell'intera applicazione, ovvero quelle a cui è possibile accedere all'interno dell'intera applicazione. Variabili globali in Java: quando usarle?  -1

Come creare variabili globali

Le variabili globali sono variabili accessibili da qualsiasi punto dell'applicazione. In altre parole, il loro ambito è l'intera applicazione. Per creare una variabile di questo tipo in Java, è necessario creare una variabile statica pubblica in una classe pubblica:
public class Example {
    public static int a;
    public static int b;
    public static String str;
}
Le variabili a, be str- sono diventate globali. Possiamo accedervi direttamente da altre classi all'interno dell'applicazione:
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);
    }
}
Se eseguiamo il metodo main, vedremo il seguente output:

4
5
Global String variable value
Le variabili globali possono essere divise in 2 tipi:
  • variabili che possono essere modificate;
  • variabili che possono essere solo lette.
Queste ultime sono chiamate costanti globali. Per creare una costante globale, è necessario creare una variabile finale assegnarle un valore quando si definisce la variabile:
public class Constants {

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

}
Secondo la convenzione di denominazione Java, tutte le costanti devono essere denominate in maiuscolo, separando le parole con un carattere di sottolineatura. Quindi, abbiamo creato delle costanti e ora non saremo in grado di modificare i loro valori: Variabili globali in Java: quando usarle?  - 2possiamo tuttavia leggerne i valori:
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println(Constants.HELLO_WORLD_STR);
    }
}
Conclusione:

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;
    }
}
Conclusione:

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

Dovresti usare variabili globali?

Ci sono molti articoli su Internet, il cui messaggio principale è questo: le variabili globali sono malvagie, cattive e terribili. É davvero? Proviamo a fornire i pro e i contro delle variabili globali in modo che ognuno possa trarre le proprie conclusioni. Variabili globali in Java: quando usarle?  - 3Cominciamo con i contro. Immaginiamo un'applicazione che abbia una classe con variabili globali che possono essere lette e modificate. Nel tempo, cresce il numero di classi nel progetto, il numero di variabili globali e metodi che utilizzano variabili globali o, in altre parole, dipendono da esse. Nel tempo, ciascuna variabile globale viene letta in diverse parti del sistema per scopi diversi. Il valore di una variabile può essere aggiornato in diverse parti del sistema. Il quadro generale del mondo di questa applicazione diventa notevolmente più complicato e ciò porta ai seguenti svantaggi :
  1. Ridotta leggibilità e maggiore difficoltà nella comprensione del codice.
  2. Maggiore complessità della manutenzione del codice.
  3. Per modificare una variabile globale, è necessario analizzare l'intero codice in modo da non impostare la variabile su un valore non valido per altre parti del sistema.
  4. Aumento degli errori di cui è molto difficile eseguire il debug.

    Immaginiamo una variabile globale, un array di oggetti. In una parte del sistema, ad esempio, in questo array sono previste stringhe e in un'altra parte del sistema qualcuno ha deciso di utilizzare numeri in virgola mobile. È improbabile che qualcuno voglia capirlo.

  5. I nomi delle variabili potrebbero essere gli stessi se utilizzi variabili globali nel tuo codice, così come alcune librerie che, a loro volta, utilizzano anche variabili globali. Ciò può portare a errori sia da parte della tua applicazione che da parte della libreria che stai utilizzando.
  6. Aumenta la connettività tra le diverse parti del sistema che utilizzano variabili globali. Al contrario, dovresti cercare di ottenere un accoppiamento libero del codice. È meglio avere molti piccoli sottosistemi vagamente collegati tra loro piuttosto che avere una cosa pesante. Perché è più facile per il cervello gestire diverse cose semplici che una cosa troppo complessa e confusa.
  7. Scrivere unit test diventa più difficile perché il test non sa quali variabili globali sono necessarie e come devono essere inizializzate.
  8. Nelle applicazioni multithread, l'utilizzo di variabili globali da parte di thread diversi porta ad un aumento degli errori di difficile debug e ad un aumento della complessità del progetto. Per questo motivo è necessario configurare più correttamente l'accesso a tali variabili, dotandole di sincronizzazioni e blocchi. Ciò potrebbe portare a cortocircuiti in futuro. Ad esempio, il thread A ha bloccato la variabile X per il proprio lavoro e il thread B ha bloccato la variabile Y per il proprio lavoro e il thread A ora necessita della variabile Y e il thread B necessita della variabile X. Di conseguenza, il programma si bloccherà.
Ma tutto ciò è inesatto. Questa è una descrizione dei rischi, la cui probabilità aumenta con la crescita del progetto e l'aumento del numero di variabili globali in esso contenute. Passiamo ai pro :
  1. Nei piccoli progetti, le variabili globali sono la cosa più semplice per far funzionare il progetto.
  2. A volte la paura di utilizzare variabili globali porta a una complessità ancora maggiore del progetto. Quindi i programmatori iniziano a creare singleton e a ricorrere ad altri modelli di progettazione.
  3. Nella programmazione, spesso è necessario fare affidamento su alcuni valori immutabili.

    La cosa più ragionevole è scrivere tali valori come costanti, perché solo le costanti garantiscono che il valore di una variabile non cambierà nel tempo. Tali costanti possono essere trovate continuamente ( Integer.MAX_VALUE, Integer.MIN_VALUE, Boolean.TRUE, Collections.EMPTY_LISTecc.). Ma la programmazione non si limita all’utilizzo delle librerie standard. Accade spesso che sia necessario scrivere una sorta di logica unica, che dovrà fare affidamento sulle proprie costanti uniche. Ecco perché a volte l'uso delle costanti (variabili globali di sola lettura) rende davvero la vita più semplice.

In generale, non dovresti abusare delle variabili globali; se possibile, usa solo costanti. Si è detto prima che usare variabili globali in piccoli progetti non è male. Ma è meglio per uno sviluppatore alle prime armi non usarli affatto. Per due ragioni:
  1. Tutto ciò che scrive uno sviluppatore alle prime armi è essenzialmente un piccolo progetto. E l'uso delle variabili globali nei suoi progetti gli insegnerà a usare le variabili globali ovunque.
  2. È meglio imparare prima a fare a meno dei “trucchi proibiti”. E con l’esperienza, la comprensione di quando sia opportuno utilizzare tali tecniche verrà da sola.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION