Olá não ficou muito claro o Escopo e sua função dentro while, apresentado nesta aula.
Olá não ficou muito claro o Escopo e sua função dentro while, apresentado nesta aula.
Fala Luciano, tudo certo?
O escopo dentro de laços de repetição funciona assim como em métodos e em comandos condicionais; ou seja, O laço consegue enxergar tudo que é mais externo a ele, porém tudo que é declarado dentro do laço, existe apenas ali dentro, e quando o laço é quebrado, deixa de existir. Como assim? Vamos imaginar a situação:
public static void main(String args[]){
int numero = 10;
int contador = 1;
while (contador <= numero){
System.out.println(contador);
contador++;
}
System.out.println(contador);
}
Um código simples que imprime os números de 1 a 10 na tela, utilizando um laço while
, logo após isso, o programa imprime o número 11 a partir do método main. Nesse código, vimos que o while está usando variáveis fora de seu escopo interno, mas que estão no mesmo nível, pois estão todos dentro do método main. Vimos, também, que é possível acessar a variável contador diretamente pelo método main()
, fora do while, que não teremos problemas! No entanto, basta mudar um pouco as coisas de lugar:
public static void main(String args[]){
int numero = 10;
while (contador <= numero){
int contador = 1;
System.out.println(contador);
contador++;
}
System.out.println(contador);
}
Agora a variável contador
está sendo declarada dentro do laço de repetição, e o comportamento do código agora é uma bagunça!
contador
existe apenas dentro do laço while, e por este motivo o código não vai nem compilar, pois estamos tentando acessá-la diretamente do método main. Lembre-se: as variáveis declaradas dentro do laço existem apenas enquanto o laço existe, quando este é quebrado, as variáveis são desalocadas.contador
com o valor 1, cairíamos em um laço infinito, pois essa variável teria sempre o valor 1, e nunca chegaria ao valor da variável numero
.contador
declarada dentro dele deixou de existir também!Então, o escopo define onde as variáveis existem. Um truque para entender melhor os escopos é observar as {}
chaves, que especificam os blocos de código. Em geral, os blocos de código mais internos enxergam tudo que esta no bloco de código que o envolve, como por exemplo o laço while que enxerga as variáveis no método main()
. Já os blocos de código mais externos não enxergam as variáveis declaradas dentro dos blocos mais internos, pois estas deixam de existir ao fim do bloco!
Fico à disposição em caso de dúvidas.
Um grande abraço e bons estudos!