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
, b
e 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.
final
e 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: possiamo 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. Cominciamo 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 :- Ridotta leggibilità e maggiore difficoltà nella comprensione del codice.
- Maggiore complessità della manutenzione del codice.
- 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.
- 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.
- 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.
- 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.
- Scrivere unit test diventa più difficile perché il test non sa quali variabili globali sono necessarie e come devono essere inizializzate.
- 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à.
- Nei piccoli progetti, le variabili globali sono la cosa più semplice per far funzionare il progetto.
- 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.
- 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_LIST
ecc.). 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.
- 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.
- È 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.
GO TO FULL VERSION