segunda-feira, 1 de setembro de 2008

Declarando Variáveis Locais

Um dos tópicos da seção 1 diz que o programador deve desenvolver código que declare, inicialize e use variáveis locais. Neste post iremos falar um pouco sobre elas. Já vimos vários modificadores de acesso. Vimos que eles são aplicados em membros de uma classe (que podem ser métodos ou variáveis). Toda variável possui um escopo. Escopo a gente aprendeu na 1ª série que nada mais é do que o limite até onde essa variável pode ser acessada (cuidado pra não confundir com encapsulamento). No java variáveis podem ser de 3 tipos:
  • Locais ou de métodos
  • De classe
  • De instância
Uma variável local ou de método tem o seu escopo limitado ao método ou bloco (por exemplo um for) em que ela foi definida. A sua vida se resume ao local delimitado pelas chaves em que ela foi criada. Por exemplo:

public void mostrarNome(String nome) {
int a = 10;
System.out.println(nome);
}

As variáveis 'a' e 'nome' são variáveis locais. O escopo delas está limitado as chaves que abrem e fecham o método mostrarNome. Isso significa que após a última chave, elas simplesmente não existirão. Podemos ter também algo do tipo:

public void contarAte(int contador) {
for (int i =0; i <= contador) System.out.println(i); } System.out.println(i); }
Quantas variáveis locais temos aí? Quem disse 2 acertou na mosca. São elas: 'contador' e 'i'. A variável 'i' é uma variável local também, só que o seu escopo está limitado ao laço for no qual ela foi criada. Então isso significa que esse código não compilaria pois estamos tentando acessar a variável 'i' fora o seu escopo, pois o compilador não enxerga mais a varíavel após a última chave do for. Já a variável contador seria perfeitamente acessível daí, já que o seu escopo é o método todo.
Mas eu falei de modificadores de acesso no começo deste post, o que tem a ver com as variáveis locais? Tem tudo a ver. Ou por que não dizer "não tem nada a ver". Isso porque as variáveis locais só aceitam um único modificador de acesso: final. O modificador final quando aplicado a uma varíavel local diz que o valor da variável não pode ser modificado após a sua inicialização. Então se fizéssemos algo do tipo:

public void contarAte(final int contador) {
contador = 100; //erro
...
}
Esse código não compila, pois a varíavel contador não pode ter o seu valor alterado pois ela é uma variável final. O modificador final pode ser usado em java para definir constantes, apesar de uma das palavras chaves da linguagem ser a palavra const, ela não é utilizada. Assim você diz que uma variável é uma constante aplicando a ela o modificador final.
Para finalizar você precisa saber que uma variável local precisa ser OBRIGATORIAMENTE inicializada antes de ser utilizada. E você precisa garantir que ela o será, caso contrário o seu código não irá compilar.

public void exibeResultado(boolean exibe) {
String resultado;
if (exibe)
resultado = "Fui iniciada?";
System.out.println(resultado);
}
Você pode achar que o compilador vai ser legal com você e aceitar que se o parâmetro exibe for true a variável resultado será inicializada e poderá ser utilizada. Mas ele não vai aceitar isso. Ele vai reclamar para você que a variável resultado pode não ser inicializada. Lembra que eu falei que você tinha que garantir que ela o seja? Para corrigir o trecho acima basta fazermos:
public void exibeResultado(boolean exibe) {
String resultado;
if (exibe)
resultado = "Fui iniciada?";
else
resultado = "Com certeza";
System.out.println(resultado);
}
Agora sim, o compilador se dará por satisfeito e compilará o seu código. Resumindo o que vimos:
  • Variáveis locais só podem ser marcadas como final.
  • Variáveis locais TEM que ser inicializadas antes do seu uso.
Até o próximo post.

Um comentário: