Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

EX05AULA01 - Operador '?' poderia ser usado nesse caso?

Ola, na aula 01 de Design Patterns C# tem o seguinte exercício...

Implemente mais uma estratégia de cálculo de imposto. Crie o imposto que se chama ICCC, que retorna 5% do valor total caso o orçamento seja menor do que R$ 1000,00 reais, 7% caso o valor esteja entre R$ 1000 e R$ 3000,00 com os limites inclusos, ou 8% mais 30 reais, caso o valor esteja acima de R$ 3000,00. Escreva um método main que testa sua implementação. Cole aqui o código do ICCC.

E a resposta dada para o exercício é...

public class ICCC : Imposto
{
    public double Calcula(Orcamento orcamento)
    {
        if (orcamento.Valor < 1000)
        {
            return 0.05 * orcamento.Valor;
        }
        else if (orcamento.Valor >= 1000 && orcamento.Valor <= 3000)
        {
            return 0.07 * orcamento.Valor;
        }
        else
        {
            return 0.08 * orcamento.Valor + 30.0;
        }
    }
}

Porém fiquei me perguntando se teria alguma outra forma de escrever isso sem usar os IFs. E então resolvi da seguinte forma...

    public class ICCC : Imposto
    {
        public double Calcula(Orcamento orcamento)
        {
            double val = orcamento.Valor;
            double imposto = (val < 1000) ? val * 0.05 : ((val <3000) ? val * 0.07 : val * 0.08 + 30);
            return imposto;

        }
    }

Funcionou e não tenho mais IFs, porém o código ficou um pouco confuso e de difícil entendimento. A pergunta é: É aconselhável usar o operador '?' para fugir dos IFs nessa situação? É mais "elegante" ou ganho em performance ?

Obrigado.

2 respostas
solução

Olá Flávio,

Usando o operador ? você não evita o if. Internamente o compilador faz a mesma operação que faria se você tivesse escrito o if. Portanto, no quesito de performance não haverá nenhuma diferença.

Mas sem o if esse código fica muito difícil de ser entendido pelo programador e consequentemente sua manutenção mais complexa, portanto aconselho você usar o if.

Essa outra forma de fazer o if, usando o ? é chamada de if ternário e geralmente usamos em ocasiões menos complexas como em retornos de métodos.

Entendi. Obrigado pelo esclarecimento!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software