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

Melhores práticas para o código

Olá pessoal! Consegui resolver o exercício com o código abaixo, porém gostaria de algumas dicas - já que imagino que nem tudo está de acordo com as melhores práticas. Poderiam avaliar? Obrigado.

<meta charset="UTF-8">
<script>

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

    for (var contador = 1; contador <= 3; contador++) {

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

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

        alert("Bem-vindo ao sistema " + loginInformado);
        contador = 4;

    } else {

        alert("Login inválido. Tente novamente");
        if(contador >= 3) {
            alert("Credenciais bloqueadas. Procure o administrador do sistema para recuperação")
        }
            }

    }

 </script>
4 respostas

EVITE NÚMEROS MÁGICOS OBS: números mágicos são aqueles que são definidos arbitrariamente (sem estar numa variavel), quando representam alguma coisa importante

Quando o usuario acerta login e senha, voce coloca "contador = 4" , isso para poder sair do for ,,, porem poderia deixar isso mais claro usando uma função que quebra o loop

por enquanto eu so programo em C , e a função que quebra o loop no C seria o break; no seu caso, nao sei qual seria a função

o parametro 3 do seu for (que indica quantas tentativas o usuario tem ate que o sistema bloqueio ele) tambem é um numero magico, voce poderia declarar uma variavel antes do for, e inicializa-la como 3 (e tambem dê um nome sugestivo, por exemplo, tentativas).

solução!

Fala Renato, tudo bem ?

Na verdade seu código ficou bem legal. Apenas algumas pequenas coisa poderiam ser citadas.

A primeira delas sobre a indentação do código (que reconheço, pode ser que a culpa seja do editor de código do tópico mas enfim). A ideia é que qualquer bloco de código iniciado (entre abertura e fechamento de chaves) fique visível na sua coluna, ou seja, que seja possível visualizar o início e fim do bloco na vertical tendo como base a coluna onde o código se inicia.

Veja o caso do seu laço de repetição. As variáveis definidas internamente pra recuperar o texto do usuário, o if, etc estão na mesma coluna do for dificultando a visualização do ciclo de vida do laco.

for (var contador = 1; contador <= 3; contador++) {

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

    if( loginCadastrado == loginInformado && senhaCadastrada == senhaInformada ) {
        alert("Bem-vindo ao sistema " + loginInformado);
        contador = 4;
    }// fechamento do if
    ...
    ...
}//fechamento do for

Veja como fica mais claro a identificação de cada bloco.

Outra coisa que poderia ser adicionada é o uso da clausula brake; ao invés de forçar com que o novo teste seja falso com contador = 4;. A clausula tem exatamente a semântica de termino de iterações entre laços de repetição. Ganhamos semântica no código e até mesmo performance, pois não será necessário alterar o valor da variável e testá-la novamente para verificar a necessidade de uma nova iteração.

Somente esses pequenos ajustes eu consegui enxergar. No mais seu código ficou bem legal. Suas variáveis estão com bons nomes, facilitando o entendimento do código, seus trechos e sentenças estão bem separados o que também ajuda. Continue sempre escrevendo código com foco no entendimento por seres humanos e não por interpretadores e compiladores, seus colegas de equipe e projeto agradecerão por isso (e você também =))

Mandou bem. Bons estudos!

Boa observação também do Igor. Uma variável tentativas (por exemplo) fora do laço ajudaria ainda mais na questão semântica.

Abraços pessoal.

Obrigado Igor e Rafael pela contribuição. Com relação aos números mágicos, concordo plenamente - porém, naquele momento era a única forma que sabia de quebrar o looping (problema resolvido na aula seguinte do curso :) ). E confesso que também não me atentei a indentação do código... Realmente, fica muito mais entendível após o ajuste.

Segue código ajustado. Novamente obrigado pelo suporte pessoal!

<meta charset="UTF-8">

<script>

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

    for (var contador = 1; contador <= tentativas; contador++) {

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

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

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

            break;

        } else {

            alert("Login inválido. Tente novamente");

                if(contador >= 3) {
                    alert("Credenciais bloqueadas. Procure o administrador do sistema para recuperação")
                }
            }

    }

 </script>