Como criar variáveis globais
Variáveis globais são variáveis acessíveis de qualquer lugar do aplicativo. Em outras palavras, seu escopo é toda a aplicação. Para criar tal variável em Java, você precisa criar uma variável estática pública em uma classe pública:public class Example {
public static int a;
public static int b;
public static String str;
}
As variáveis a
e - tornaram-se globais b
. str
Podemos acessá-los diretamente de outras classes dentro da aplicação:
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 executarmos o método main
, veremos a seguinte saída:
4
5
Global String variable value
As variáveis globais podem ser divididas em 2 tipos:
- variáveis que podem ser editadas;
- variáveis que só podem ser lidas.
final
e atribuir um valor a ela ao definir a variável:
public class Constants {
public static final double PI = 3.1415926535897932384626433832795;
public static final String HELLO_WORLD_STR = "Hello, World!";
}
De acordo com a convenção de nomenclatura Java, todas as constantes devem ser nomeadas em letras maiúsculas, separando as palavras com um caractere de sublinhado. Então, criamos constantes e agora não poderemos alterar seus valores: Porém, podemos ler seus valores:
public class HelloWorld {
public static void main(String[] args) {
System.out.println(Constants.HELLO_WORLD_STR);
}
}
Conclusão:
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;
}
}
Conclusão:
Площадь круга с радиусом 10,000000=314,159265
Você deve usar variáveis globais?
Existem muitos artigos na Internet cuja mensagem principal é esta: as variáveis globais são más, más e terríveis. É realmente? Vamos tentar apresentar os prós e os contras das variáveis globais para que todos possam tirar suas próprias conclusões. Vamos começar com os contras. Vamos imaginar uma aplicação que possui uma classe com variáveis globais que podem ser lidas e editadas. Com o tempo, cresce o número de classes no projeto, o número de variáveis globais e métodos que utilizam variáveis globais, ou seja, dependem delas. Com o tempo, cada variável global é lida em diferentes partes do sistema para finalidades diferentes. Em diferentes partes do sistema, o valor de uma variável pode ser atualizado. A imagem geral do mundo deste aplicativo torna-se significativamente mais complicada e isso leva às seguintes desvantagens :- Legibilidade reduzida e maior dificuldade na compreensão do código.
- Maior complexidade de manutenção de código.
- Para alterar uma variável global, é necessário analisar todo o código para não definir a variável com um valor inválido para outras partes do sistema.
- Aumento de erros muito difíceis de depurar.
Vamos imaginar uma variável global, um array de objetos. Em uma parte do sistema, por exemplo, são esperadas strings neste array, e em outra parte do sistema, alguém decidiu usar números de ponto flutuante. É improvável que alguém queira entender isso.
- Os nomes das variáveis podem ser os mesmos se você usar variáveis globais em seu código, assim como algumas bibliotecas que, por sua vez, também usam variáveis globais. Isso pode levar a erros tanto no lado do seu aplicativo quanto no lado da biblioteca que você está usando.
- Aumenta a conectividade entre diferentes partes do sistema que utilizam variáveis globais. Pelo contrário, você deve se esforçar para obter um acoplamento flexível do código. É melhor ter muitos subsistemas pequenos fracamente conectados uns aos outros do que ter uma coisa pesada. Porque é mais fácil para o cérebro lidar com várias coisas simples do que com algo muito complexo e confuso.
- Escrever testes unitários torna-se mais difícil porque o teste não sabe quais variáveis globais são necessárias e como elas precisam ser inicializadas.
- Em aplicações multithread, o uso de variáveis globais por diferentes threads leva a um aumento de erros difíceis de depurar e a um aumento na complexidade do projeto. Por conta disso, é necessário configurar de forma mais correta o acesso a tais variáveis, dotando-as de sincronizações e bloqueios. Isso pode levar a curtos-circuitos no futuro. Por exemplo, o thread A bloqueou a variável X para seu trabalho, e o thread B bloqueou a variável Y para seu trabalho, e o thread A agora precisa da variável Y e o thread B precisa da variável X. Como resultado, o programa irá congelar.
- Em projetos pequenos, as variáveis globais são a coisa mais simples para fazer o projeto funcionar.
- Às vezes, o medo de usar variáveis globais leva a uma complexidade ainda maior no projeto. Então os programadores começam a criar singletons e a recorrer a outros padrões de design.
- Na programação, muitas vezes você precisa confiar em alguns valores imutáveis.
O mais razoável é escrever tais valores como constantes, pois somente constantes garantem que o valor de uma variável não mudará com o tempo. Essas constantes podem ser encontradas o tempo todo (
Integer.MAX_VALUE
,Integer.MIN_VALUE
,Boolean.TRUE
,Collections.EMPTY_LIST
etc.). Mas a programação não se limita ao uso de bibliotecas padrão. Muitas vezes acontece que você precisa escrever algum tipo de lógica única, que precisará contar com suas próprias constantes exclusivas. É por isso que às vezes o uso de constantes (variáveis globais somente leitura) realmente facilita a vida.
- Tudo o que um desenvolvedor novato escreve é essencialmente um projeto pequeno. E usar variáveis globais em seus projetos irá ensiná-lo a usar variáveis globais em todos os lugares.
- É melhor primeiro aprender a prescindir de “truques proibidos”. E com a experiência, a compreensão de quando é apropriado usar tais técnicas surgirá por si só.
GO TO FULL VERSION