Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Não é uma dúvida, apenas fiquei curioso de como funciona exatamente o percorrer do script no código abaixo

No exercício Simulando tela de login de Lógica de programação I eu compreendi até bem o que estava acontecendo no código. Mas a única coisa que eu não entendi bem, foi a parte das variáveis var loginInformado = prompt("Informe seu login"); e var senhaInformada = prompt("Informe sua senha");. Que neste caso elas estão dentro da condição while. Até aí o código funciona normalmente. Mas depois que eu coloquei essas variáveis fora da condição while juntamente com a variáveis que estão fora da condição while. Depois da primeira vez que o usuário digita a senha ou login errado. O código exibe os prompt "Informe seu login" e "Informe sua senha" apenas uma vez no navegador. E depois na segunda e terceira vez exibe apenas a mensagem do alert "Login inválido" e Tente novamente" e mais nada de Prompt pedindo "Informe seu login" e "Informe sua senha" . Gostaria de entender o porquê isso acontece nesse caso?

<meta charset="UTF-8">

<script>

    var loginCadastrado = "alura";
    var senhaCadastrada = "alura321";

    var maximoTentativas = 3;
    var tentativaAtual = 1;

    while(tentativaAtual <= maximoTentativas) {

        var loginInformado = prompt("Informe seu login");
        var senhaInformada = prompt("Informe sua senha");

        if( loginCadastrado == loginInformado && senhaCadastrada == senhaInformada ) {

            alert("Bem-vindo ao sistema, " + loginInformado);

            tentativaAtual = maximoTentativas; // acertou, então faço o gasto de todas as tentativas para sair do loop. Lá embaixo vai incrementar + 1! 

        } else {

            if (tentativaAtual == 3) {
                alert("Número permitido de tentativas ultrapassado!");
            } else {
                alert("Login inválido. Tente novamente");
            }
        }

        // vai para a próxima tentativa
        tentativaAtual = tentativaAtual +1

        // abaixo um atalho de ir para a próxima tentativa
        //tentativaAtual++ 
    }

</script>
2 respostas
solução!

Olá Marcos, tudo bem?

O while é uma estrutura de repetição, ele repete a execução de um bloco de código enquanto a sua condição for verdadeira. Quando você coloca as variáveis de loginInformado e senhaInformada para fora do while elas só serão chamadas uma única vez, enquanto que todo o código que está dentro do while irá ser chamado enquanto a sua condição for válida. Nesse caso, faz sentido o loginInformado e a senhaInformada estarem dentro do while, pois o fluxo é o seguinte:

1- Usuário insere login e senha;

2- O código verifica se o login e senha são válidos;

3- Caso seja válido, o usuário consegue entrar no sistema;

4- Caso não seja válido, o usuário deve inserir novamente o login e senha.

Note que no passo 4, acontece uma repetição, correto? O usuário errou e precisa inserir novamente os dados, então ele precisa que o sistema peça esses dados novamente. No código definimos que ele tem possui 3 tentativas, então precisamos dar a ele a oportunidade de inserir os seus dados 3 vezes, caso ele erre. Quando os campos de loginInformado e senhaInformada estão dentro do while`, isso acontece. Já quando estão fora do while, isso não acontece pois todo o código que está fora do while não é repetido.

Espero ter te ajudado, fique a vontade para perguntar caso tenha ficado alguma dúvida.

Bons estudos!!

Olá, Jemima! Tudo bem, sim! Entendi perfeitamente. Foi bem explicado e mais claro do que um cristal. Muito obrigado e bom trabalho!