Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 嵌套的if条件与多个分隔的if条件,每个if条件中都有return语句_C#_.net_If Statement_Coding Style_Conditional Statements - Fatal编程技术网

C# 嵌套的if条件与多个分隔的if条件,每个if条件中都有return语句

C# 嵌套的if条件与多个分隔的if条件,每个if条件中都有return语句,c#,.net,if-statement,coding-style,conditional-statements,C#,.net,If Statement,Coding Style,Conditional Statements,以下两个函数中最专业的代码样式是什么? 如果函数变得更复杂、更大,比如有20个检查,该怎么办? 注意:每次检查后我都需要做一些事情,所以我不能将所有的if语句连接在一起,比如: 如果(vehicle.isBus)和(vehicle.numberOfWheels==6)和(vehicle.motorVersion==2019) 第二个示例在读取代码时需要更少的认知开销 在第一个示例中,您需要保持程序状态的心理“堆栈”。在第二个例子中,你只需要保留一个你已经知道是真的事情的列表 第二个例子也不

以下两个函数中最专业的代码样式是什么?
如果函数变得更复杂、更大,比如有20个检查,该怎么办?
注意:每次检查后我都需要做一些事情,所以我不能将所有的if语句连接在一起,比如:
如果(vehicle.isBus)和(vehicle.numberOfWheels==6)和(vehicle.motorVersion==2019)


第二个示例在读取代码时需要更少的认知开销

在第一个示例中,您需要保持程序状态的心理“堆栈”。在第二个例子中,你只需要保留一个你已经知道是真的事情的列表


第二个例子也不太可能被放错地方的支架弄糊涂;事实上,在本例中,它根本不需要任何大括号。

我遵循的一条黄金法则是尽量避免嵌套

使用使代码更具可读性和可理解性的代码。仅在两种情况下,第一种方法更具逻辑性和可读性。与&、| |和!关联的5或6个条件可能不再如此

因此,当支票数量为5+时,您应该选择第二种选择。


注意:多个ifs而不返回每个调用意味着两个或多个ifs可能为真。

肯定是第二个ifs。第一个嵌套太多,我认为第一个更好,因为它是可扩展的。第二种方法很好,直到您还需要检查
vehicle.isMinivan
,然后需要进行重大重构。什么是“做一些事情?”方法是验证车辆还是修改车辆?如果两者都有,那就有点混乱了。但是这个问题的答案可能表明了如何简化代码。
//first alternative
public bool validate(Vehicle vehicle)
{
    if(vehicle.isBus)
    {
        //do some stuff here related to vehicle.isBus
        if (vehicle.numberOfWheels == 6)
        {
            //do some stuff here related to vehicle.numberOfWheels
            if (vehicle.motorVersion == 2019)
            {
                //do some stuff here related to vehicle.motorVersion
                return true;
            }
        }
    }
    return false;
}

//second alternative
public bool validate(Vehicle vehicle)
{
    if (!vehicle.isBus)
    {
        return false;
    }
    //do some stuff here related to vehicle.isBus

    if (vehicle.numberOfWheels != 6)
    {
        return false;
    }
    //do some stuff here related to vehicle.numberOfWheels

    if (vehicle.motorVersion != 2019)
    {
        return false;
    }
    //do some stuff here related to vehicle.motorVersion

    return true;
}