Tomar decisões com base em condições é uma tarefa comum no desenvolvimento de software, e em Java temos várias formas de implementar essas lógicas, como if-else
, switch
e o uso de enums. Neste post, exploraremos cada uma dessas abordagens no contexto de um projeto com Spring Boot, destacando seus usos ideais e como podem ser implementadas.
1. Uso do if-else
O if-else
é ideal para condições simples ou quando há uma sequência pequena de verificações. Por exemplo, suponha que estamos implementando uma API de cálculo de descontos baseados em diferentes categorias de clientes:
public double calcularDesconto(String categoria) {
if ("PREMIUM".equalsIgnoreCase(categoria)) {
return 20.0;
} else if ("BASIC".equalsIgnoreCase(categoria)) {
return 10.0;
} else {
return 0.0;
}
}
No Spring Boot, essa lógica poderia ser encapsulada em um serviço:
@Service
public class DescontoService {
public double calcularDesconto(String categoria) {
if ("PREMIUM".equalsIgnoreCase(categoria)) {
return 20.0;
} else if ("BASIC".equalsIgnoreCase(categoria)) {
return 10.0;
} else {
return 0.0;
}
}
}
2. Uso do switch
O switch
é uma alternativa mais clara quando lidamos com múltiplas opções distintas, especialmente em casos de comparações discretas. Vamos refatorar o exemplo acima:
public double calcularDesconto(String categoria) {
switch (categoria.toUpperCase()) {
case "PREMIUM":
return 20.0;
case "BASIC":
return 10.0;
default:
return 0.0;
}
}
No Java 12 ou superior, você pode usar o switch expression para maior concisão:
public double calcularDesconto(String categoria) {
return switch (categoria.toUpperCase()) {
case "PREMIUM" -> 20.0;
case "BASIC" -> 10.0;
default -> 0.0;
};
}
No contexto de Spring Boot, essa lógica também seria implementada em um serviço.
3. Uso de Enums
Quando lidamos com valores fixos e bem definidos, como categorias, o uso de enums traz clareza e segurança ao código. Aqui está como podemos usar enums para resolver o problema do cálculo de descontos:
Criando o Enum
public enum Categoria {
PREMIUM(20.0),
BASIC(10.0),
PADRAO(0.0);
private final double desconto;
Categoria(double desconto) {
this.desconto = desconto;
}
public double getDesconto() {
return desconto;
}
}
Refatorando o Serviço
@Service
public class DescontoService {
public double calcularDesconto(Categoria categoria) {
return categoria.getDesconto();
}
}
Usando o Serviço no Controlador
@RestController
@RequestMapping("/descontos")
public class DescontoController {
@Autowired
private DescontoService descontoService;
@GetMapping("/{categoria}")
public double obterDesconto(@PathVariable String categoria) {
try {
Categoria cat = Categoria.valueOf(categoria.toUpperCase());
return descontoService.calcularDesconto(cat);
} catch (IllegalArgumentException e) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Categoria inválida");
}
}
}
4. Comparando as Abordagens
Abordagem | Quando Usar |
---|---|
if-else | Para condições simples ou quando há poucas opções a serem verificadas. |
switch | Para múltiplas condições discretas e claras, especialmente quando se utiliza Java 12 ou superior. |
enums | Quando as opções são fixas, bem definidas e precisam ser reutilizadas em diferentes partes do código. |
Conclusão
Cada uma das abordagens tem seu espaço no desenvolvimento com Java e Spring Boot. O if-else
é direto e simples, mas pode se tornar confuso com muitas condições. O switch
é ideal para múltiplas comparações discretas, enquanto os enums trazem organização e reutilização ao lidar com conjuntos de valores fixos. Escolha a abordagem que melhor atende à necessidade do seu projeto e mantenha seu código limpo e fácil de entender.