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

[Dúvida] Dúvida Conversor de moedas em Java

Realizei o desafio "Conversor de moedas" em java e gostaria de saber se o código que foi escrito está bom. A princípio acredito eu que eu tenha feito uma "gambiarra" para ele funcionar, mas gostaria de uma opinião externa. Desde de já agradeço pela ajuda e se tiver algo que eu possa melhorar, por favor não deixe de me dizer.

https://github.com/andrenevesxavier/Conversor_de_moedas

2 respostas
solução!

Oii, André! Tudo bem?

Parabéns por finalizar o desafio do Conversor de Moedas! É muito legal ver que você já está dominando o uso de Records, a biblioteca Gson e o novo HttpClient do Java. Seu código está funcional, e isso é o mais importante no começo!

Você comentou sobre a "gambiarra" e o problema com o switch. Fique tranquilo, isso é super comum. Vou te explicar o que aconteceu e dar algumas dicas para deixar seu código ainda mais profissional ("Clean Code").

1. O mistério do Switch Case
O comportamento estranho que você notou (onde ele passava por todas as opções) acontece porque, no modelo clássico do switch, o Java continua executando as linhas de baixo a não ser que você mande ele parar. Faltou apenas o comando break; ao final de cada case.

Porém, como você está usando uma versão mais nova do Java, você pode usar o Switch Expression (com a setinha ->), que é mais moderno e não precisa de break. Olha como fica mais limpo:

switch (opcao) {
    case 1 -> moedasUsadas = "USD/ARS";
    case 2 -> moedasUsadas = "ARS/USD";
    case 3 -> moedasUsadas = "USD/BRL";
    case 4 -> moedasUsadas = "BRL/USD";
    case 5 -> moedasUsadas = "USD/EUR";
    case 6 -> moedasUsadas = "EUR/USD";
    case 7 -> {
        moedasUsadas = "";
        System.out.println("Programa finalizado");
    }
    default -> System.out.println("Entrada inválida");
}

2. Nomes de métodos vs. construtores
Notei na classe Requisicao o seguinte trecho:
public void Requisicao() throws ...

Quando usamos o mesmo nome da classe, o Java entende como um Construtor (aquele método chamado ao criar o new Requisicao()). Porém, ao colocar o void, ele vira um método comum. Isso pode gerar confusão.
Sugestão: Que tal renomear esse método para deixar claro o que ele faz? Algo como public void exibirMenu() ou public void iniciar().

Espero que essas dicas ajudem a clarear suas dúvidas. Você mandou muito bem na implementação da API!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Vlw pelas dicas, vou executa-las em códigos futuros