1
resposta

Minha primeira solução do desafio dos ingressos antes de ver a resolução das aulas:

//Sim, tudo em uma função só kkkk

function comprar() {

let disponivel = [
document.getElementById('qtd-pista'),
document.getElementById('qtd-superior'),
document.getElementById('qtd-inferior')
];

let tipoIngresso = document.getElementById('tipo-ingresso').value;
let quantidade = parseInt(document.getElementById('qtd').value);
let comprado;
let atual;

if (tipoIngresso === 'pista') {

    atual = Number(disponivel[0].textContent);
    if (atual < quantidade) {
        alert('Ingressos não suficientes');
        return;
    } else {
        comprado = atual - quantidade;
    }
    disponivel[0].textContent = comprado;
    console.log(`Ingressos para ${tipoIngresso} disponíveis: ${atual}`);

} else if (tipoIngresso === 'superior') {

    atual = Number(disponivel[1].textContent);
    if (atual < quantidade) {
        alert('Ingressos não suficientes');
        return;
    } else {
        comprado = atual - quantidade;
    }
    disponivel[1].textContent = comprado;
    console.log(`Ingressos para ${tipoIngresso} disponíveis: ${atual}`);

} else {

    atual = Number(disponivel[2].textContent);
    if (atual < quantidade) {
        alert('Ingressos não suficientes');
        return;
    } else {
        comprado = atual - quantidade;
    }
    disponivel[2].textContent = comprado;
    console.log(`Ingressos para ${tipoIngresso} disponíveis: ${atual}`);

}

}

1 resposta

Olá, Joab. Como vai?

Parabéns por conseguir resolver o desafio com lógica própria! Chegar a um resultado funcional antes de ver a resolução do instrutor é uma das melhores formas de fixar o aprendizado, pois força o seu cérebro a estruturar o problema do zero.

Seu código cumpre bem o papel: você conseguiu recuperar os elementos do DOM, converter os valores para números com parseInt e Number, e aplicou as verificações condicionais necessárias para validar a quantidade de ingressos.

Para agregar valor ao seu desenvolvimento, gostaria de sugerir alguns pontos de melhoria baseados em boas práticas de programação:

  • Evite Repetição (Princípio DRY - Don't Repeat Yourself): Note que a lógica de verificar a quantidade e subtrair o valor é praticamente a mesma nos três blocos de if/else. Você poderia simplificar isso criando uma função auxiliar ou tratando os elementos de forma mais dinâmica.
  • Organização em Funções Menores: Como você mesmo brincou no comentário, está tudo em uma função só. No dia a dia, costumamos separar a "captura de dados" da "lógica de cálculo" e da "atualização da tela". Isso facilita muito a manutenção do código.
  • Tratamento de entradas: É sempre uma boa prática verificar se o usuário digitou um número válido ou uma quantidade positiva antes de seguir com os cálculos.

Veja um exemplo de como poderíamos refatorar sua lógica para deixá-la mais enxuta:

function comprar() {
    let tipoIngresso = document.getElementById('tipo-ingresso').value;
    let quantidade = parseInt(document.getElementById('qtd').value);
    
    // Capturamos o elemento específico baseado no tipo selecionado
    let elementoQtd = document.getElementById(`qtd-${tipoIngresso}`);
    let quantidadeDisponivel = parseInt(elementoQtd.textContent);

    if (quantidade > quantidadeDisponivel) {
        alert(`Quantidade indisponível para o tipo ${tipoIngresso}`);
    } else {
        quantidadeDisponivel -= quantidade;
        elementoQtd.textContent = quantidadeDisponivel;
        alert('Compra realizada com sucesso!');
    }
}

Dessa forma, o código fica mais fácil de ler e você não precisa de tantos if e else para cada setor do evento. Continue praticando, pois essa curiosidade de testar suas próprias soluções é o que faz um programador evoluir rápido!

Espero que possa ter lhe ajudado!