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

[Dúvida] Dúvida sobre Lógica de programação: praticando com desafios (Desafio Compre seu ingresso)

Esse foi o código que escrevi antes de assistir as aulas e conferir o gabarito.

A minha dúvida surgiu quando percebi que o meu código funcionava perfeitamente mesmo sem criar as functions para comprarSuperior() e comprarInferior().

No caso eu apenas acabei utilizando else if e tudo funcionou normalmente, gostaria de saber se esse tipo de código é possível ou esta errado de alguma forma e o correto a se escrever é com as functions pra cada um deles.


function comprar(){
    let quantidade = parseInt(document.getElementById("qtd").value);
    let tipoIngresso = document.getElementById("tipo-ingresso");
        if(isNaN(quantidade) || quantidade <= 0) {
            alert("Por favor, insira uma quantidade válida.");
            return;
        }
        if(tipoIngresso.value == "pista") {
            comprarPista(quantidade);
    } else if (tipoIngresso.value == "superior"){
        let qtdSuperior = parseInt(document.getElementById("qtd-superior").textContent);
            if(quantidade > qtdSuperior){
                alert("Quantidade indisponível para superior");
                } else {
                    qtdSuperior = qtdSuperior - quantidade;
                    document.getElementById("qtd-superior").textContent = qtdSuperior;
                    alert("Compra realizada com sucesso!");
                }
            } else if (tipoIngresso.value == "inferior"){
                let qtdInferior = parseInt(document.getElementById("qtd-inferior").textContent);
                if(quantidade > qtdInferior){
                alert("Quantidade indisponível para inferior");
                } else {
                    qtdInferior = qtdInferior - quantidade;
                    document.getElementById("qtd-inferior").textContent = qtdInferior;
                    alert("Compra Realizada com sucesso!");
                }
            }
}

function comprarPista(quantidade){
    let qtdPista = parseInt(document.getElementById("qtd-pista").textContent);
    if(quantidade > qtdPista){
        alert("Quantidade indisponível para pista");
    }   else {
        qtdPista = qtdPista - quantidade;
        document.getElementById("qtd-pista").textContent = qtdPista;
        alert("Compra realizada com sucesso!");
    }
}

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta
solução!

Ola amigo Gabriel.
Seu código está funcionando corretamente, mas tem uma diferença importante entre uma solução simples, como a que você fez, e uma abordagem mais estruturada, que seria utilizando funções específicas para as compras de "superior" e "inferior", por exemplo.
Vamos analisar ambas as abordagens.

  1. Usando else if dentro da função principal (seu código atual)
    No seu código, você está utilizando a estrutura else if diretamente dentro da função comprar(), o que é perfeitamente válido.
    O código funciona porque ele verifica qual tipo de ingresso foi escolhido (pista, superior ou inferior), e executa a lógica correspondente a cada tipo de ingresso dentro de um único bloco de código.
    Prós dessa abordagem:
  • Simplicidade: O código é direto ao ponto, fácil de entender e funciona sem problemas.
  • Menos complexidade: Não há necessidade de criar funções adicionais, o que pode ser vantajoso em códigos simples e com poucos casos de uso.
    Contras dessa abordagem:
  • Repetição de código: O código para verificar a quantidade disponível e atualizar a quantidade restante para cada tipo de ingresso é repetido nas verificações do "superior" e "inferior". Isso pode tornar a manutenção do código mais difícil, especialmente se for necessário fazer alterações ou adicionar novos tipos de ingresso.
  • Menos modularidade: Com o código todo na função comprar(), ele se torna um "bloco único", o que pode dificultar a compreensão e testes independentes das partes do código.
  1. Usando funções específicas para cada tipo de ingresso
    A outra abordagem seria separar a lógica de "comprar superior" e "comprar inferior" em funções próprias.
    Isso tornaria o código mais modular e reutilizável.
    Prós dessa abordagem:
  • Modularidade:
    • Cada tipo de compra está separado em funções próprias.
    • Isso torna o código mais fácil de entender e modificar, especialmente em sistemas maiores.
  • Reusabilidade:
    • Se, por exemplo, você precisar alterar a forma como calcula a quantidade restante ou a lógica de alertas, basta modificar a função específica sem afetar o restante do código.

  • Facilidade de manutenção:
    • Se você precisar adicionar outro tipo de ingresso no futuro, basta criar uma nova função comprar[Tipo] e incluir a verificação correspondente na função comprar().

Pode parecer um pouco mais "pesado" em termos de número de funções, mas isso se compensa na manutenção de sistemas maiores.
No caso de sistemas simples ou para testes e estudos não problema algum a sua abordagem.
Porém, se você estiver planejando expandir o código no futuro ou se ele for parte de um sistema maior, vale a pena seguir a abordagem modular, usando funções específicas para cada tipo de ingresso.
Isso tornaria o código mais escalável e organizado.
O seu código não está "errado", mas a estruturação com funções específicas ajuda a organizar melhor a lógica e torna a manutenção mais fácil em sistemas maiores.
Qualquer duvida comente ai.
Obrigado.