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

[Sugestão] Compra do ingresso

Quebrei bastante a cabeça para solucionar este desafio, contando apenas com o apoio da Luri (ainda não vi os vídeos nem baixei o projeto final).

Acabei utilizando else if e o parseInt, que por acaso esqueci que existia mas que fora fundamental para a resolução deste desafio.

Abaixo segue o meu código e, caso tenha, por favor, deixe uma sugestão para melhoria ou um comentário construtivo!

let qtdPista = parseInt(document.getElementById('qtd-pista').textContent);
let qtdInferior = parseInt(document.getElementById('qtd-inferior').textContent);
let qtdSuperior = parseInt(document.getElementById('qtd-superior').textContent);

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

  if (tipoIngresso == 'superior' && quantidade < qtdSuperior) {
    qtdSuperior = qtdSuperior - quantidade;
    document.getElementById('qtd-superior').textContent = qtdSuperior;
  } 
  else if (tipoIngresso == 'inferior' && quantidade <= qtdInferior) {
    qtdInferior = qtdInferior - quantidade;
    document.getElementById('qtd-inferior').textContent = qtdInferior;
  } 
  else if (tipoIngresso == 'pista' && quantidade <= qtdPista) {
    qtdPista = qtdPista - quantidade;
    document.getElementById('qtd-pista').textContent = qtdPista;
  }
  else{
    alert('Esta quantidade não está disponível');
  }
quantidade = (document.getElementById('qtd').value = 0);
}
2 respostas
solução!

Olá, Maria! Parabéns por ter conseguido resolver o desafio! É muito bom ver o seu progresso e a sua dedicação.

Analisando o seu código, percebo que você utilizou bem a função parseInt e os blocos condicionais if e else if. Isso está de acordo com o que foi ensinado na aula, então parabéns por isso!

No entanto, tenho uma sugestão que pode tornar o seu código mais enxuto e fácil de ler. Observe que você está repetindo a mesma lógica para os três tipos de ingressos: 'superior', 'inferior' e 'pista'. Isso é um sinal de que você pode abstrair essa lógica em uma função separada. Veja como isso poderia ser feito:

function atualizarQuantidade(tipoIngresso, quantidade) {
  let qtdIngresso = parseInt(document.getElementById(`qtd-${tipoIngresso}`).textContent);

  if (quantidade <= qtdIngresso) {
    qtdIngresso = qtdIngresso - quantidade;
    document.getElementById(`qtd-${tipoIngresso}`).textContent = qtdIngresso;
    return true;
  } else {
    return false;
  }
}

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

  if (!atualizarQuantidade(tipoIngresso, quantidade)) {
    alert('Esta quantidade não está disponível');
  }

  quantidade = (document.getElementById('qtd').value = 0);
}

Nesse exemplo, a função atualizarQuantidade recebe o tipo do ingresso e a quantidade como parâmetros, e realiza a lógica de atualização da quantidade de ingressos. Ela retorna true se a atualização foi bem-sucedida, e false caso contrário. Na função comprar, nós chamamos atualizarQuantidade e, se ela retornar false, mostramos o alerta de que a quantidade não está disponível.

Espero que essa sugestão seja útil para você! Lembre-se, a ideia aqui é tentar evitar a repetição de código, tornando-o mais enxuto e fácil de entender. Espero ter ajudado e bons estudos!

Olá Renan.

Fiquei impressionada com sua sugestão, realmente deu um caráter mais "limpo".

Obrigada pelo apoio!