Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?

Use constantes, e não números - declarando variáveis com o final

Suponha que o governo te contratou para criar um aplicativo que, dentre outras coisas, analisa se um cidadão é maior de idade ou não.
Como você faria este teste condicional?

if(idade >= 18)...ou quem sabe if(idade > 17) ?

Ambos corretos, mas absolutamente não recomendáveis.

Nesse artigo ensinaremos uma importante lição de Java: Não usar números, e sim constantes.




Fugindo, um pouco, do escopo da seção "Orientação a Objetos", vamos introduzir uma boa prática na programação Java, que é o uso de constantes.
Essa seção tem por objetivo introduzir conceitos pro próximo artigo, sobre enum.

Por que usar constantes ao invés de números?


Imagine que você fez a aplicação. Uma aplicação real assim leva, fácil, milhares de linhas de código.
Durante todo o seu programa você usou esse número mágico, o 18.
Ora, é claro que ele vai aparecer várias vezes, pois a aplicação Java sobre maior idade etc.

Ok, até aí tudo bem.
Como você estudou pelo curso Java Progressivo, seu programa está funcionando que é uma beleza.

Agora imagine a situação: eleições.
Novos governantes, novas leis...a maioridade agora é 16.
O que eles fazem?

'Chama o programador!' e lá vai você, sair catando no código o número 18 e substituindo por 16.
Imagina o trabalho...

Um mais esperto pode dizer: 'use regex ou ctrl+f' ou outro atalho qualquer pra achar 18 e substituir por 16.
Mas e se no seu aplicativo o número 18 aparecer e não tem nada a ver com idade?
Vai ter um baita bug.

Ou em vez de 18, você usou os números 0 ou 1 em sua aplicação, e agora precisa mudar.
Não dá pra substituir todos os 1 ou 0, tem que sair catando no código e mudando manualmente !!!


A vantagem de usar constantes é essa: você define uma vez, e usa o NOME da constante!
O certo seria:

int maioridade=18;
if( idade >= maioridade)

Pronto. A variável 'maioridade' poderia aparecer 1 milhão de vezes no seu código.
No dia que o governo mudar ela, mude só a declaração do valor, de 18 pra 16 e isso será reproduzido em todo seu código.

Outra vantagem é a facilidade pra ler seu código, por você (depois de meses sem ver o código, a gente esquece o que significa aquele amontoado de códigos Java) ou pra outra pessoa que for ler.
Note:
if(idade > 17)
Não dá pra saber, exatamente o que é isso, só olhando. Tem que ver alguma documentação pra ter certeza.

Porém, se você se deparar com:
if(idade > maioridade)
...ora, maioridade é maioridade! Já sei do que se trata! Esse 'if' checa se a pessoa é adulta!

Outro exemplo:
A = 3.14*r*r
O que é isso? Não sabe?

E agora...
A = PI*r*r
Agora ficou óbvio que é o número pi, então é algo relacionado com geometria. No caso, a área de um círculo.
O mais indicado seria definir constantes e usar seus nomes.
Fica mais bonito, elegante e profissional.

Ou seja, defina o valor de suas variáveis e use constantes.


final - declarando variáveis constantes

O Java reservou um artifício bem interessante para você usar suas constantes, que é a keyword 'final'.



Quando você define uma variável com o 'final', ela se torna constante.
Se tentar mudar ela, obterá um erro.

A declaração é a seguinte:
final tipo nomeDaVariavel

Por exemplo:
final int SIM = 1;
final int NAO = 0;

Pronto. Agora você pode usar 'SIM' e 'NAO', ao invés de usar números.
Usar um 'OK' ou 'ERRO', ao invés de números estranho e bizarros.

Em classes, seria:
private final int STATUS_ON = 1;
private final int STATUS_OFF = 0;

De agora em diante, usaremos pouco números.
Mesmo que suas aplicações sejam simples e curtas - e aparente não haver necessidade de constantes - use-as.
É um costume que levará quando se tornar profissional e criar aplicações reais.


final em Classes e Objetos



Em uma classe, você poderá declarar um atributo como final de duas maneiras possíveis:

  1. Ao inicializar a variável, inicie com seu valor. Só faça isso se quiser que todos os objetos daquela classe possuam essa variável com o mesmo valor.
  2. Você também poderá inicializar suas variáveis através de um método construtor. Assim, cada objeto inicializado poderá ter um valor diferente.
Mas se lembre: após inicializadas em sua declaração ou no construtor, não podem mais ser alteradas.

Certifique-se de que quer mesmo ter uma constante em sua aplicação. Se sim, sempre use a keyword final, pois isso evitará que a variável tenha seu valor alterado por acidente ou má programação.

10 comentários:

Anônimo disse...

Excelente !!! isso vai ajudar muitos eu acredito que isso seja um ovo de ouro ... sendo que em outros locais não se ensinam esse macete. Obrigado parabéns e sucesso a todos !!!

Anônimo disse...

Simplesmente muito bom. Obrigado pelas dicas.

Abraço a todos e bons códigos.

dinbra948 disse...

Realmente fica mais visível, principalmente para iniciantes como eu. Gostei muito!!!valeu!

dinbra948 disse...

Muito bom!!

Anônimo disse...

muito bom, a explicaçao e mesmo uma dica a mais, obrigado a todos!

M. A. S. Afonso disse...

Muito bom! Mais melhoria para meus códigos. Parabéns.

Giovanni disse...

Muito bom, eu não tinha pensado nisso. Obrigado

Thyago Neves disse...

Muito boa essa orientação, aumenta a segurança do código prevenindo alteração no valor das constantes, assim não criaremos "constantes INconstantes" rs

Além de evitar um trabalhão depois caso surja a necessidade de alterar o código como salientado no artigo.

Anônimo disse...

vc me deu um problema que eu resolveria bem mais rapido kkkk, referente a mudança de maior idade penal de 18 para 16, de vez ter que muda a programação, só copia a programação, cola no bloco de notas e substitui 18 por 16, abraços kkkkkkkkkkk

Anônimo disse...

Bem explicativo, obrigado.

Contribuir com o Java Progressivo

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo


Tutoriais de Java