有没有更好的方法来减少if语句

时间:2020-02-24 14:56:21

标签: c#

我是C#的新手,当我有许多if语句时,我不确定如何优化代码。 所以到现在为止

 if (input.Contains("triangle"))
 {
     if (input.Contains("rectangular"))
     {

     }
     else if (input.Contains("isosceles"))
     {

     }
     else if (input.Contains("equilateral"))
     {

     }
}

我不确定该怎么做。

是否有更好的方法来减少if语句?

1 个答案:

答案 0 :(得分:0)

给定的代码已经适合其目的。这里不需要过早的优化。但是,我将为您提供有关if语句何时需要改写的想法。

示例问题:

验证输入。有效输入不得包含空格或点。除7外,也允许数字。

不太好的代码:

bool validate(String str) {
    // "!" is read as "not". True becomes false, and vice-versa
    if (!(str.Contains(" "))){
        if (!(str.Contains("."))){
            if (!(str.Contains("7"))){
                Console.WriteLine("Success");
                 return true;
            }
        }
    }
    return false;
}

这就是您所说的嵌套条件。太多的嵌套if语句可能是真正的 eyesore ,那就是您要对其进行修复的时候。尽管嵌套的if语句并不总是很糟糕,但是考虑分离的方法通常是个好主意,这样就不会使主代码缩进。 (在这种情况下,您可能会争辩使用“ ||”(“或”运算符)或“ &&”(“与”运算符)将条件组合为一个if语句。这没有错,但是在更复杂的逻辑中,您会通常希望将条件分开以便于调试。)

稍好一些的代码:

bool validate(String str) {
    // "!" is read as "not". True becomes false, and vice-versa
    bool isValid = true;
    if (str.Contains(" ")){
        isValid = false;
    }
    if (str.Contains(".")){
        isValid = false;
    }
    if (str.Contains("7")){
        isValid = false;
    }
    if (isValid){
        Console.WriteLine("Success");
    }
    return isValid;
}

另一种策略是使用提早退出。 基本上,这意味着首先检查不需要的情况,如果发现这种情况,请立即返回false。

更好的代码:

bool validate(String str) {
    // Since we are checking for unwanted cases, we won't use the not operator
    if (str.Contains(" ")){
        return false;
    }
    if (str.Contains(".")){
        return false;
    }
    if (str.Contains("7")){
        return false;
    }
    // You could also do 
    // if (str.Contains(" ") || str.Contains(".") || str.Contains("7")) if you want

    // Notice how the main code is not within any if-statement
    Console.WriteLine("Success");
    return true;
}

结论:

  • 避免不必要的嵌套条件

  • 可能的情况要分开。

  • 利用提前退出

  • 许多if语句都可以,特别是如果您的程序需要处理许多情况时。不要花75%的时间来尝试过早的优化,否则会产生偏执。如果对if语句进行更改,不会导致速度差异很大。但是,使它们更整洁确实会给程序员阅读您的代码(可能包括您)带来很大的不同。

相关问题