Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Escopo no While

Olá não ficou muito claro o Escopo e sua função dentro while, apresentado nesta aula.

1 resposta
solução!

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!

  • A variável 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.
  • Ainda que o código compilasse, por a cada iteração do laço declararmos uma nova variável 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.
  • Por fim, imaginando que não ocorresse o loop infinito e que os números de 1 a 10 foram impressos, de novo tentaríamos acessar a variável fora do escopo do laço e encontraríamos uma exceção! Quando o laço foi interrompido, a variável 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!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!