2
respostas

[Projeto] Desafio: Alíquotas com IF

Acho que o código ficou meio poluído, alguma sugestão de como deixá-lo mais compacto?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

class Programa
{
    static void Main(string[] args)
    {
        double salario = 3500;
        //Tabaela de IR corrigida, últimos dois digitos são centavos
        double IrAte190398 = 0.0;
        double IrAte282665 = salario * 0.075 - 142.80;
        double IrAte375105 = salario * 0.15 - 354.80;
        double IrAte466468 = salario * 0.225 - 636.13;
        double IrAcima466468 = salario * 0.275 - 869.36;

        Console.WriteLine("Vamos Calcular o Valor do seu salário e descontar o IR?");
        Console.WriteLine("Seu salário é " + salario + ".");

        if (salario < 1993.98)
        {
            Console.WriteLine("Você é Isento.");
        }
        else if (salario >= 1990.0 && salario <= 2800.0)
        {
            double salarioDescontado = salario - IrAte282665;
            Console.WriteLine("Seu IR é de 7,5% sendo deduzido na declaração o valor de R$142.");
            Console.WriteLine("Seu salário descontado do IR é R$ " + salarioDescontado + ".");

        }
        else if (salario >= 2801.01 && salario <= 3751.0)
        {
            double salarioDescontado = salario - IrAte375105;
            Console.WriteLine("Seu IR é de 15% e pode deduzir na declaração  o valor de R$350.");
            Console.WriteLine("Seu salário descontado do IR é R$ " + salarioDescontado + ".");
        }
        else if (salario >= 3751.01 && salario <= 4664.68)
        {
            double salarioDescontado = salario - IrAte466468;
            Console.WriteLine("Seu IR é de 22.5% e pode deduzir na declaração o valor de R$636");
            Console.WriteLine("Seu salário descontado do IR é R$ " + salarioDescontado + ".");
        }
        else if (salario >= 4664.69)
        {
            double salarioDescontado = salario - IrAcima466468;
            Console.WriteLine("Seu IR é de 22.5% e pode deduzir na declaração o valor de R$636.");
            Console.WriteLine("Seu salário descontado do IR é R$ " + salarioDescontado + ".");
        }

        Console.WriteLine("Enter para sair");
        Console.ReadLine();
    }        
2 respostas

Wilson,

São boas práticas de programação. Existem técnicas para simplificar condições.

Neste caso aplica-se algo chamado de "Refatoração de código". Para "IFs" aninhados tem algumas a saber:

  • Técnica 32 - Decompor Condição
  • Técnica 33 - Consolidar Expressão Condicional
  • Técnica 34 - Consolidar Fragmentos Condicionais Duplicados
  • Técnica 36 - Substituir Condição Aninhada com Cláusulas de Guarda

Mas... agora fiquei na dúvida qual delas seria possível aplicar... ou se nenhuma é cabível.

https://cursos.alura.com.br/course/csharp-refatorando-codigo-parte-2/task/33392

Veja também:

==========================================================

C# - Otimizando o código que usa o bloco if-else

José Carlos Macoratti

Hoje veremos 3 abordagens para otimizar o código quando temos uma lógica complexa que usa o bloco if-else na linguagem C#.

https://macoratti.net/21/09/c_otifelse1.htm

==========================================================

Switch Statement in C#

Difficulty Level : Easy - Last Updated : 22 Apr, 2020

https://www.geeksforgeeks.org/switch-statement-in-c-sharp/

==========================================================

[]'s,

Fabio I.

Wilson!

Talvez usando o Designer Pattern DECORATOR:

Este vídeo explica:

==========================================================

DECORATOR

https://cursos.alura.com.br/course/design-patterns-dotnet/task/2604

==========================================================

Achei este site muito interessante também:

==========================================================

Decorator

Também conhecido como: Decorador, Envoltório, Wrapper

Propósito

O Decorator é um padrão de projeto estrutural que permite que você acople novos comportamentos para objetos ao colocá-los dentro de invólucros de objetos que contém os comportamentos.

https://refactoring.guru/design-patterns/decoratorhttps://refactoring.guru/pt-br/design-patterns/decorator

==========================================================

Chain of Responsibility

Também conhecido como: CoR, Corrente de responsabilidade, Corrente de comando, Chain of command

https://refactoring.guru/pt-br/design-patterns/chain-of-responsibility

==========================================================

Diferença entre decorator e chain of responsability

Publicado 2 anos atrás, em 02/05/2021

https://cursos.alura.com.br/forum/topico-diferenca-entre-decorator-e-chain-of-responsability-154674

==========================================================

[]'s,

Fabio I.