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.
- 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.
- 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.