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

Solução encontrada, deixando o mais genérico possível

Boa tarde,

Eu gostaria que vocês fizessem a gentileza de analisar a solução encontrada e me deem um feedback se é a forma mais correta:


function comprar() {

    let tipo = document.getElementById('tipo-ingresso').value;
    let campoQtd = document.getElementById('qtd');

    comprarIngresso(campoQtd, tipo);    
}


function comprarIngresso(campoQtd, tipo) {
    let qtdSetorCampo;
    let qtd = parseInt(campoQtd.value);

    if(tipo == 'pista') {
        qtdSetorCampo = pegaSetor(tipo);
    } else if (tipo == 'inferior') {
        qtdSetorCampo = pegaSetor(tipo);
    } else {
        qtdSetorCampo = pegaSetor(tipo);
    }

    let qtdSetor = parseInt(qtdSetorCampo.textContent);

    if(qtdSetor == 0) {
        alert(`Ingressos esgotados para o setor ${tipo}`);
    } else if(qtd > qtdSetor){
        alert(`Quantidade indisponível para o tipo ${tipo}`);
    } else {
        qtdSetor = qtdSetor - qtd;
        qtdSetorCampo.textContent = qtdSetor;
    }
    campoQtd.value = '';
}

function pegaSetor(tipo) { 
    return qtdSetorCampo = document.getElementById(`qtd-${tipo}`);
}
2 respostas
solução!

Olá Francisco, como vai?

Sua solução para o problema está correta e bem estruturada. Você conseguiu reduzir a repetição de código, que é uma prática muito importante em programação, conhecida como DRY (Don't Repeat Yourself).

A função comprarIngresso(campoQtd, tipo) que você criou é genérica e pode lidar com qualquer tipo de ingresso, o que é muito bom. Além disso, você criou uma função pegaSetor(tipo) para pegar a quantidade de ingressos disponíveis para um determinado tipo, o que também é uma boa prática.

No entanto, notei um pequeno detalhe que pode ser melhorado. Na função comprarIngresso(campoQtd, tipo), você tem um if e dois else if que estão fazendo a mesma coisa, ou seja, chamando a função pegaSetor(tipo). Você pode simplificar isso removendo essas condições e chamando a função pegaSetor(tipo) diretamente. Veja como ficaria:

function comprarIngresso(campoQtd, tipo) {
    let qtdSetorCampo;
    let qtd = parseInt(campoQtd.value);

    qtdSetorCampo = pegaSetor(tipo);

    let qtdSetor = parseInt(qtdSetorCampo.textContent);

    if(qtdSetor == 0) {
        alert(`Ingressos esgotados para o setor ${tipo}`);
    } else if(qtd > qtdSetor){
        alert(`Quantidade indisponível para o tipo ${tipo}`);
    } else {
        qtdSetor = qtdSetor - qtd;
        qtdSetorCampo.textContent = qtdSetor;
    }
    campoQtd.value = '';
}

Com essa alteração, o código fica mais limpo e fácil de ler. Parabéns pelo seu trabalho e continue assim!

Espero ter ajudado!

Caso tenha dúvidas, fico à disposição.

Abraços e bons estudos!

Nossa, perfeito, como não vi isso hahaha! Ele já está recebendo o tipo, não precisa de verificação condicional. Obrigado pelo rápido feedback!