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

Criar vários if's ou utilizar o if else como na opinião do instrutor?

Segue meu código abaixo.

Minha dúvida é: A melhor forma (boa prática, seja por performance ou outra convenção) de criar este programa seria com if-else ou com ifs separados? Não se preocupem com as regras de código a mais, como os cálculos automáticos, foi um b.

public class CalculoIR {

    public static void main(String[] args) {

        /* Base de cálculo (R$) x Alíquota (%)
        Até 1.903,98                -   0%
        De 1.903,99 até 2.826,65    -   7,5%
        De 2.826,66 até 3.751,05    -   15%
        De 3.751,06 até 4.664,68    -   22,5%
        Acima de 4.664,68           -   27,5%
         */

        double salario = 22050.0;

        double baseDeCalculoEmRealDeSetePorcento = 1903.99;
        double baseDeCalculoEmRealDeQuinzePorcento = 2826.66;
        double baseDeCalculoEmRealDeVinteDoisPorcento = 3751.06;
        double baseDeCalculoEmRealDeVinteSetePorcento = 4664.69;

        int aliquotaDeZero = 0;
        double aliquotaDeSete = 7.5;
        double aliquotaDeQuinze = 15.0;
        double aliquotaDeVinteDois = 22.5;
        double aliquotaDeVinteSete = 27.5;

        boolean descontoIRZero = salario < baseDeCalculoEmRealDeSetePorcento;
        boolean descontoIRSete = salario >= baseDeCalculoEmRealDeSetePorcento && salario < baseDeCalculoEmRealDeQuinzePorcento;
        boolean descontoIRQuinze = salario >= baseDeCalculoEmRealDeQuinzePorcento && salario < baseDeCalculoEmRealDeVinteDoisPorcento;
        boolean descontoIRVinteDois = salario >= baseDeCalculoEmRealDeVinteDoisPorcento && salario < baseDeCalculoEmRealDeVinteSetePorcento;
        boolean descontoIRVinteSete = salario >= baseDeCalculoEmRealDeVinteSetePorcento;

        if(descontoIRZero == true){
            System.out.println("Até 1.903,98, o IR é de " +
                    aliquotaDeZero + "%" +
                    " e será deduzido R$ " +
                    ((salario * aliquotaDeZero) / 100) +
                    ".");
        }

        if(descontoIRSete == true){
            System.out.println("De 1.903,99 até 2.826,65, o IR é de 7,5%." +
                    aliquotaDeSete + "%" +
                    " e será deduzido R$ " +
                    ((salario * aliquotaDeSete) / 100) +
                    ".");
        }

        if(descontoIRQuinze == true){
            System.out.println("De 2.826,66 até 3.751,05, o IR é de " +
                    aliquotaDeQuinze + "%" +
                    " e será deduzido R$ " +
                    ((salario * aliquotaDeQuinze) / 100) +
                    ".");
        }

        if(descontoIRVinteDois == true){
            System.out.println("De 3.751,06 até 4.664,68, o IR é de " +
                    aliquotaDeVinteDois + "%" +
                    " e será deduzido R$ " +
                    ((salario * aliquotaDeVinteDois) / 100) +
                    ".");
        }

        if(descontoIRVinteSete == true){
            System.out.println("Acima de 4.664,68, o IR é de " +
                    aliquotaDeVinteSete + "%" +
                    " e será deduzido R$ " +
                    ((salario * aliquotaDeVinteSete) / 100) +
                    ".");
        }
    }
}

Exemplo do instrutor com if-else:

        double salario = 3300.0;

        if(salario >= 1900.0 && salario <= 2800.0) {
            System.out.println("A sua aliquota é de 7,5%");
            System.out.println("Você pode deduzir até R$ 142");
        } else if(salario >= 2800.01 && salario <= 3751.0) {
            System.out.println("A sua aliquota é de 15%");
            System.out.println("Você pode deduzir até R$ 350");
        } else if(salario >= 3751.01 && salario <= 4664.0) {
            System.out.println("A sua aliquota é de 22.5%");
            System.out.println("Você pode deduzir até R$ 636");
        }
2 respostas
solução!

Bom dia Victor.

Existem sim alternativas ao If/else para facilitar a leitura, uma delas é a adoção do Pattern Strategy. Este artigo aqui da Alura tem mais detalhes de como implementar: https://www.alura.com.br/artigos/reduzindo-de-n-ifs-para-nenhum-com-strategy-em-java

Bons estudos!!

Era exatamente o que eu queria, muito obrigado Fernanda!