Usando if-else, switch e enums no Desenvolvimento com Java e Spring Boot

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

AbordagemQuando Usar
if-elsePara condições simples ou quando há poucas opções a serem verificadas.
switchPara múltiplas condições discretas e claras, especialmente quando se utiliza Java 12 ou superior.
enumsQuando 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.

Deixe um comentário