Снижение условий - PullRequest
       10

Снижение условий

0 голосов
/ 23 сентября 2018

Я рассчитываю отображаемую сумму платежа для получения заказа, хочу уменьшить эти условия до максимума:

private double CalculateFinalTotal(bool hasPrommoCode, 
                                   double promoCodeValue, 
                                   double finalTotal, 
                                   double? tip)
{
    if (!hasPrommoCode) return finalTotal;
    if (promoCodeValue > finalTotal && tip.HasValue) return tip.Value;
    else if (promoCodeValue > finalTotal) return 0;
    else if (tip.HasValue)
    {
        var totalWithoutTip = finalTotal - tip.Value;
        return (totalWithoutTip > promoCodeValue ? totalWithoutTip - promoCodeValue : 0) + tip.Value;
    }
    else return finalTotal - promoCodeValue;
}

1 Ответ

0 голосов
/ 23 сентября 2018

Прежде всего, никогда не используйте double для кода, связанного с деньгами, всегда используйте decimal.

Кроме того, вы можете не проверять, имеет ли tip значениеили не используя GetValueOrDefault().И, следуя соглашениям c # (если вы действительно заботитесь о читабельности), всегда используйте скобки вокруг if операторов.

В итоге вы должны получить что-то вроде:

private decimal CalculateFinalTotal(bool hasPrommoCode, decimal promoCodeValue, 
                                   decimal finalTotal, decimal? tip)
{
    if (!hasPrommoCode) 
    {
        return finalTotal;
    }

    if (promoCodeValue > finalTotal) 
    {
        // if .HasValue == true => return .Value; otherwise return 0
        return tip.GetValueOrDefault();
    }

    if (tip.HasValue)
    {
        var totalWithoutTip = finalTotal - tip.Value;
        return (totalWithoutTip > promoCodeValue ? totalWithoutTip - promoCodeValue : 0) + tip.Value;
    }

    return finalTotal - promoCodeValue;
}
...