es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mantenibilidad y legibilidad de una función que tiene muchas condiciones if else.

Tengo una función para calcular el salario como sigue. Las definiciones de las funciones CalculateHRA y CalculateAllowance no se muestran. La función CalculateSalary tiene muchas condiciones if-else y si se agregan nuevas condiciones, esta función sigue creciendo. ¿Hay alguna manera mejor de manejar esto aparte de if-else?

public class SalaryDTO{
public int Salary{get;set;}
public int Bonus {get;set;}
public int HRA {get;set;}
public int Allowance {get;set;}
public string Output{get;set;}
}

public void CalculateSalary(List salaryDTO)
{
foreach(var a in salaryDTO)
{
if(a.Salary > 0 && a.Bonus >0)
{
a.HRA = CalculateHRA(a.Salary,a.Bonus);
a.Allowance = CalculateAllowance(a.Salary,a.Bonus);
a.Output = “Ganancia”;
}
if(a.Salary < 0 && a.Bonus < 0)
{
a.HRA = CalculateHRA(a.Salary,a.Bonus);
a.Allowance = CalculateAllowance(a.Salary,a.Bonus);
a.Output = “Pérdida”;
}
if(a.Salary > 0 && a.Bonus == 0)
{
a.HRA = CalculateHRA(a.Salary,a.Bonus);
a.Allowance = 10;
a.Output = “Ganancia”;
}
if(a.Salary == 0 && a.Bonus < 0)
{
a.HRA = 20;
a.Allowance = CalculateAllowance(a.Salary,a.Bonus);
a.Output = “Ganancia”;
}
if(a.Salary <0 && a.Bonus >0)
{
//Algun código y condiciones similares a lo anterior
}
}
}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una mejor forma de manejar esto sería usar una declaración de switch en lugar de un if-else. Esto haría que el código sea más legible y fácil de mantener. Por ejemplo:

    public void CalcularSalario(List<SalaryDTO> salaryDTO)
    {
      foreach(var a in salaryDTO)
      {
        switch (a.Salary > 0, a.Bonus > 0)
        {
            case (true, true):
                a.HRA = CalcularHRA(a.Salary,a.Bonus);
                a.Allowance = CalcularAllowance(a.Salary,a.Bonus);
                a.Output = "Ganancia";
                break;
            case (false, false):
                a.HRA = CalcularHRA(a.Salary,a.Bonus);
                a.Allowance = CalcularAllowance(a.Salary,a.Bonus);
                a.Output = "Pérdida";
                break;
            case (true, false):
                a.HRA = CalcularHRA(a.Salary,a.Bonus);
                a.Allowance = 10;
                a.Output = "Ganancia";
                break;
            case (false, true):
                a.HRA = 20;
                a.Allowance = CalcularAllowance(a.Salary,a.Bonus);
                a.Output = "Ganancia";
                break;
        }
      }
    }
    

Comments are closed.