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

[Dúvida] Dúvida - Desafio Concluído

Estou fazendo os exercícios referente a aula, e me deparei com uma questão que não consegui resolver ainda. Levando em consideração que não devemos repetir as partes dentro do código, e sim transformar em funções, me deparei com o seguinte problema:

No meu jogo também quero que ele mostre quantas tentativas foram realizadas pelo jogador, no mesmo local onde informamos se o chute é maior ou menor do que o número secreto.

Para isso, coloquei a seguinte parte no código:

function verificarChute() {
    let chute = document.querySelector('input').value;
    
    if (chute == numeroSecreto) {
        exibirTextoNaTela ('h1','Acertou!');
        let palavraTentativa = tentativas > 1 ? 'tentativas' : 'tentativa';
        let mensagemTentativas = `Você descobriu o número com ${tentativas} ${palavraTentativa}!`;
        exibirTextoNaTela ('p',mensagemTentativas);
        document.getElementById('reiniciar').removeAttribute('disabled');
    }
    else {
        let palavraTentativa = tentativas > 1 ? 'tentativas' : 'tentativa';
        let maiorMenor = chute > numeroSecreto ? 'menor':'maior'
        let msgMaiorMenor = `O número é ${maiorMenor} que ${chute}! Você usou ${tentativas} ${palavraTentativa}`;
    
            exibirTextoNaTela ('h1',msgMaiorMenor);
            tentativas++;
        }
        }
        
        limparCampo()

Assim funcionou bem, conforme o esperado, porém, precisei adicionar tanto no if quanto no else a parte do let:+

let palavraTentativa = tentativas > 1 ? 'tentativas' : 'tentativa';

Eu imaginei que era só tirar essa parte de dentro do if/else, mas ao tentar ele dá um erro no console.

Vou deixar aqui o link do github com o jogo como está hoje, que está em pleno funcionamento. Gostaria de uma explicação mais "didática" do porque isso ocorre.

https://github.com/thzibetti/jogonumerosecreto/blob/main/app.js

De qualquer forma obrigado, estou adorando o curso!

1 resposta
solução!

Oi Tiago,

O problema que você está enfrentando ocorre devido ao escopo da variável palavraTentativa. Quando você declara a variável dentro do bloco if e else, ela só existe dentro desses blocos. Ao tentar movê-la para fora, ela não estará definida quando o código tentar acessá-la dentro dos blocos if e else.

Para resolver isso, você precisa declarar a variável palavraTentativa em um escopo que seja visível tanto dentro do if quanto do else, ou seja, antes do bloco condicional. Veja como ficaria:

function verificarChute() {
    let chute = document.querySelector('input').value;
    let palavraTentativa = tentativas > 1 ? 'tentativas' : 'tentativa'; // Declarada aqui

    if (chute == numeroSecreto) {
        exibirTextoNaTela ('h1','Acertou!');
        let mensagemTentativas = `Você descobriu o número com ${tentativas} ${palavraTentativa}!`;
        exibirTextoNaTela ('p',mensagemTentativas);
        document.getElementById('reiniciar').removeAttribute('disabled');
    } else {
        let maiorMenor = chute > numeroSecreto ? 'menor':'maior'
        let msgMaiorMenor = `O número é ${maiorMenor} que ${chute}! Você usou ${tentativas} ${palavraTentativa}`;    
        exibirTextoNaTela ('h1',msgMaiorMenor);
        tentativas++;
        limparCampo();
   }     
}

Ao declarar palavraTentativa antes do if, ela passa a existir em um escopo maior, permitindo que seja acessada tanto dentro do if quanto do else, evitando o erro que você encontrou.

tux matrix    Caso este post o tenha ajudado, por favor, marcar como solucionado ☑️. Bons Estudos! 🤓