1
resposta

[Dúvida] Resolução do desafio

Salve rapaziada, gostaria de saber se o meu código estaria correto para o desafio :

let qtdDisponivel = 0;

function comprar() {
    let qtdIngresso = parseInt(document.getElementById("qtd").value);
    let escolha = document.getElementById("tipo-ingresso").value;

    if (qtdIngresso <= 0) {
        alert("Opção inválida!");
        document.getElementById("qtd").value = "";
        return;
    }

    let quantidadeHtml = document.getElementById("qtd-" + escolha);
    qtdDisponivel = parseInt(quantidadeHtml.textContent);
    console.log(qtdDisponivel);
    console.log(qtdIngresso);

    if (qtdIngresso <= qtdDisponivel) {
        qtdDisponivel -= qtdIngresso;
        quantidadeHtml.textContent = `${qtdDisponivel}`
        alert(`Compra realizada com sucesso!`)
    } else {
        alert("Não há essa quantidade de ingressos disponíveis!")
        return
    }

    document.getElementById("qtd").value = "";
}
1 resposta

Olá amigo.
Seu código está correto e resolve o desafio proposto.
A lógica de validação, verificação de disponibilidade e atualização da quantidade de ingressos funciona como esperado.

Pontos positivos

  • A validação impede a compra com quantidade menor ou igual a zero
  • Uso adequado do parseInt
  • Boa estratégia ao acessar dinamicamente o elemento HTML com "qtd-" + escolha
  • Atualização correta do valor exibido na tela
  • Uso de return para interromper a execução quando necessário

A estrutura geral da função está bem organizada e fácil de entender.

Sugestões de melhoria

1. Evitar variável global desnecessária

A variável qtdDisponivel não precisa existir fora da função, pois é usada apenas dentro dela.
Manter variáveis no escopo mais restrito possível ajuda a evitar efeitos colaterais.

2. Validação contra valores inválidos (NaN)

Caso o campo de quantidade esteja vazio ou contenha texto, parseInt retornará NaN. Essa situação não é capturada pela validação atual.

3. Pequenos ajustes de estilo

O return no else final não é obrigatório, pois a função já termina ali.
Não é um erro, apenas uma questão de estilo.

Versão refatorada do código

function comprar() {
    let qtdIngresso = parseInt(document.getElementById("qtd").value);
    let escolha = document.getElementById("tipo-ingresso").value;

    if (isNaN(qtdIngresso) || qtdIngresso <= 0) {
        alert("Opção inválida!");
        document.getElementById("qtd").value = "";
        return;
    }

    let quantidadeHtml = document.getElementById("qtd-" + escolha);
    let qtdDisponivel = parseInt(quantidadeHtml.textContent);

    if (qtdIngresso <= qtdDisponivel) {
        quantidadeHtml.textContent = qtdDisponivel - qtdIngresso;
        alert("Compra realizada com sucesso!");
    } else {
        alert("Não há essa quantidade de ingressos disponíveis!");
    }

    document.getElementById("qtd").value = "";
}

O código está correto e atende ao desafio.
Com pequenos ajustes, ele se torna mais seguro, legível e alinhado com boas práticas de JavaScript.
Parabéns pelo empenho e dedicação.
Qualquer duvida estamos ai.
Bons estudos.