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

Abstração diferente

Olá, pessoal. Resolvi o exercício sem criar uma variável para controlar o máximo de tentativas. O código funciona normalmente. Gostaria de saber do ponto de vista profissional e técnico o que implica no dia a dia a resolução do problema real sem a declaração dessa variável. Segue o código:

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

    while (tentativas <= 3) {
        var loginInformado = prompt("Informe seu login");
        var senhaInformada = prompt("Informe sua senha");

        if(loginCadastrado == loginInformado && senhaCadastrada == senhaInformada) {
            alert("Bem-vindo ao sistema " + loginInformado);
            tentativas = 4;
        } else {
            alert("Login inválido. Tente novamente");
            tentativas++;
            if(tentativas > 3) {
                alert("Número de tentativas chegou ao limite. Esta conta está bloqueada!");
            }
        }
    }
4 respostas

Eu o reescreveria desta maneira

 var loginCadastrado = "alura";
    var senhaCadastrada = "alura321";
    var tentativas = 0;
    var autenticado = false;

    /*AS DECLARAÇÕES DEVEM FICAR FOLA DO LOOP*/
    var loginInformado = "";
    var senhaInformada = "";

    /*VOCE USOU AS TENTATIVAS COMO FLAG PARA SAIR DO LOOP
      ISSO NÃO É UMA BOA PRATICA DE PROGRAMAÇÃO*/

    while ((tentativas <= 3) or (autenticado=false)) {
        loginInformado = prompt("Informe seu login");
        senhaInformada = prompt("Informe sua senha");

        if(loginCadastrado == loginInformado && senhaCadastrada == senhaInformada) {
            alert("Bem-vindo ao sistema " + loginInformado);
            autenticado = true;
            break;
        } else {
            alert("Login inválido. Tente novamente");
            tentativas++;
            if(tentativas >= 3) {
                alert("Número de tentativas chegou ao limite. Esta conta será bloqueada!");
               autenticado = false;
            }
        }
    }

Usando outra variável para armazenar a autenticação você pode usar este valor mais adiante no seu código. Você pode precisar também do número de tentativas de login para outros usos.

Classe A, Gilson! Muito obrigado! Sua solução foi realmente muito melhor. Porém, não entendi duas coisas. A primeira é o por que deve-se usar o break dentro do if, se, no caso, quando a condição for verdadeira o programa não passará mais pelo while. E a segunda, por que após o número de tentativas passar de 3, ao entrar no segundo if, o valor de autenticado deve receber false novamente? Ele já não é false?

solução!

Uso o break porque chegando nesta instrução a rotina é encerrada de imediato e não executa o loop novamente e nesse caso o else não será executado e as tentativas não chegaram a passar de três. Setei autenticado como false novamente por uma questão de informação para que lê o código. Imagina que alguém esta dando manutenção no código que você escreveu e, ele tem que saber que se as tentativas ultrapassarem o numero três a autenticação será negada. No lugar deste valor poderia ser um comentário: /Negar a autentivação/

Perfeito, Gilson! Entendi! Muito obrigado pelo excelente suporte! Valeu!