O poder do 'yield' no Switch em Java: Código Limpo e Sem 'break'
🔀 O poder do 'yield' no Switch em Java: Código Limpo e Sem 'break'
Se você já programou em Java por algum tempo, provavelmente já teve que lidar com a estrutura clássica do switch. E vamos ser sinceros: aquele monte de case seguido obrigatoriamente por um break sempre foi um terreno fértil para bugs bobos por puro esquecimento.
Mas o Java evoluiu. A partir do Java 14 (de forma definitiva), o switch ganhou superpoderes e passou a funcionar também como uma expressão (ou seja, ele pode retornar um valor diretamente).
E é exatamente aí que entra uma palavra-chave nova e muito poderosa: o yield.
📌 O que é o yield no Java?
No contexto do novo switch, o yield funciona de forma muito parecida com o return, mas especificamente para dentro de um bloco switch.
Quando usamos o switch como uma expressão para retornar um valor e precisamos executar múltiplas linhas de código dentro de um case (como fazer um cálculo, logar uma informação ou instanciar um objeto), abrimos um bloco com chaves {} e usamos o yield para devolver o valor final daquele bloco.
🔍 Como funciona na Prática?
Para entender a diferença, vamos olhar para o passado. Antes, se você quisesse retornar uma mensagem baseada no status de um pedido, faria algo assim:
String mensagem;
switch (status) {
case "NOVO":
mensagem = "Pedido recebido.";
break; // ❌ Cuidado para não esquecer!
case "ENVIADO":
mensagem = "Seu pacote está a caminho.";
break;
default:
mensagem = "Status desconhecido.";
}
Com o Switch Expression, o código fica muito mais elegante. Se a lógica for de apenas uma linha, usamos a setinha -> e nem precisamos do yield:
String mensagem = switch (status) {
case "NOVO" -> "Pedido recebido.";
case "ENVIADO" -> "Seu pacote está a caminho.";
default -> "Status desconhecido.";
}; // ✔️ Muito mais limpo!
Mas e se o bloco precisar de mais lógica? É aqui que o yield brilha:
String mensagem = switch (status) {
case "NOVO" -> {
System.out.println("Registrando log de novo pedido...");
// Como abrimos chaves {}, usamos o yield para retornar o valor
yield "Pedido recebido.";
}
case "ENVIADO" -> "Seu pacote está a caminho.";
default -> "Status desconhecido.";
};
✔️ O yield informa à JVM: "Terminei minha lógica complexa aqui dentro, pegue esse valor e jogue para a variável mensagem".
💬 Dica Pessoal
No meu dia a dia atuando com desenvolvimento backend, estruturando APIs com Spring Boot e aplicando conceitos de Clean Architecture, a clareza do código é inegociável.
Sempre que estou construindo Factories ou mapeando Enums entre as camadas de microsserviços, o novo switch com yield economiza dezenas de linhas de código. Ele remove a necessidade de declarar variáveis temporárias e praticamente elimina o risco de esquecer um break e deixar o fluxo do sistema vazar para o próximo case. Usar essas ferramentas mais modernas da linguagem separa um código legado de um código verdadeiramente profissional e fácil de dar manutenção.
🛠️ Exercício Prático
Crie um enum chamado DiaDaSemana.
Em seguida, crie um método que receba esse enum e use um Switch Expression para retornar uma String informando o tipo de treino daquele dia.
Se for
SEGUNDA,QUARTAouSEXTA, retorne "Treino de Força".Se for
TERCAouQUINTA, abra um bloco{}faça umSystem.out.println("Preparando a bike...")e use oyieldpara retornar "Spinning".No
default, retorne "Descanso".
Faça o teste na sua IDE e veja como o compilador te obriga a cobrir todos os cenários possíveis (o que é excelente para evitar falhas!).
📚 Conclusão
O yield chegou para tornar o switch no Java muito mais robusto, previsível e alinhado com a programação funcional. Ele permite manter o código limpo, mesmo quando precisamos injetar lógicas complexas dentro das validações.
Se esse conteúdo fez sentido para você, compartilhe com outros devs que estão evoluindo no ecossistema Java. E se você já usou o yield em algum projeto ou ficou com alguma dúvida sobre a sintaxe, comenta aí embaixo que eu respondo! 🚀
Comentários
Postar um comentário