1
resposta

resolução do desafio

Meu código ficou completamente diferente do que está sendo passado no video, pelo menos tá funcionando

let ingressos = {
    pista: parseInt(document.getElementById("qtd-pista").textContent),
    superior: parseInt(document.getElementById("qtd-superior").textContent),
    inferior: parseInt(document.getElementById("qtd-inferior").textContent)
};

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

    if (isNaN(quantidade)) {
        quantidade = 1;
    }
    if (tipoDeIngresso == "pista" && quantidade > ingressos.pista) {
        alert("Quantidade de ingressos indisponível para Pista!");
        return;
    }

    if (tipoDeIngresso == "superior" && quantidade > ingressos.superior) {
        alert("Quantidade de ingressos indisponível para Cadeira Superior!");
        return;
    }

    if (tipoDeIngresso == "inferior" && quantidade > ingressos.inferior) {
        alert("Quantidade de ingressos indisponível para Cadeira Inferior!");
        return;
    }

    subtrairQuantidades(tipoDeIngresso, quantidade);
}


function subtrairQuantidades(tipoDeIngresso, quantidade) {
    ingressos[tipoDeIngresso] = ingressos[tipoDeIngresso] - quantidade;
    
    document.getElementById("qtd-" + tipoDeIngresso).textContent = ingressos[tipoDeIngresso];
}
1 resposta

Olá, Stella! Como vai?

A frase "pelo menos tá funcionando" é o mantra de todo desenvolvedor, mas o seu código vai além disso: ele apresenta uma lógica de estado muito interessante que é comum em frameworks modernos (como React ou Vue), embora você esteja usando JavaScript puro!

O fato de estar diferente do vídeo não é um problema. Na verdade, sua abordagem tem alguns pontos de maturidade técnica que valem ser destacados:

1. Uso de um Objeto para o "Estado"

Ao criar o objeto let ingressos, você centralizou as quantidades disponíveis em um único lugar. Isso facilita muito a manutenção. No vídeo, o professor provavelmente busca o valor do HTML toda vez que a função é disparada. A sua forma é mais eficiente em termos de memória, pois você guarda os valores em uma variável de objeto.

2. Tratamento de Erros com isNaN

Essa foi uma excelente sacada! Validar se o usuário digitou algo válido com if (isNaN(quantidade)) evita que o seu código tente subtrair algo que não seja um número, o que quebraria a lógica do sistema. Definir um padrão (1) é uma escolha de UX (User Experience) inteligente.

3. Reutilização de Código (Função subtrairQuantidades)

Aqui está o ponto alto do seu código: a abstração.
Em vez de escrever a lógica de subtrair e atualizar o texto do HTML três vezes (uma para cada tipo de ingresso), você criou uma função genérica que usa a "chave" do objeto (ingressos[tipoDeIngresso]). Isso segue o princípio DRY (Don't Repeat Yourself) — Não se repita.

Um ponto de atenção:

Existe uma pequena diferença entre a sua lógica e a do vídeo que pode afetar o comportamento em páginas reais:

  • No seu código: As quantidades de ingressos são carregadas no objeto ingressos assim que a página abre. Se você der um "F5" ou se outra função alterar o HTML, seu objeto pode ficar desatualizado se não for reinicializado.
  • No vídeo: Geralmente, busca-se o valor do HTML dentro da função comprar para garantir que o número lido seja sempre o mais atual exibido na tela.

Dica para evoluir:

Para deixar seu código ainda mais enxuto, você poderia substituir os três blocos de if por uma única validação genérica, aproveitando que o nome do tipo de ingresso no HTML e no seu objeto são iguais:

if (quantidade > ingressos[tipoDeIngresso]) {
    alert(`Quantidade de ingressos indisponível para ${tipoDeIngresso}!`);
    return;
}

Parabéns pela resolução, Stella! Ter um estilo próprio de codar e entender o porquê de suas escolhas é o que define um bom programador.

Espero que possa ter lhe ajudado!

Você chegou a testar o que acontece se o usuário tentar comprar uma quantidade negativa? Seria interessante adicionar uma validação para garantir que a quantidade seja sempre maior que zero!