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.