嵌套的if条件与每一个中带有return语句的多个分离的if条件

时间:2019-05-29 08:28:28

标签: c# .net if-statement coding-style conditional-statements

以下两个函数中最专业的代码样式是什么?
而且如果功能变得更复杂,更大,例如要进行20次检查该怎么办?
注意:每次检查后我都需要做一些事情,所以我无法将所有if语句串联起来:
if(vehicle.isBus)&&(vehicle.numberOfWheels == 6)&&(vehicle.motorVersion == 2019)

//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;
}

2 个答案:

答案 0 :(得分:0)

第二个示例在阅读代码时应该需要更少的认知开销。

在第一个示例中,您需要保留程序状态的“堆栈”。在第二个示例中,您只需要保留一份您已经知道是真的事情的清单。

第二个例子也不太可能因放错位置的支架而感到困惑;实际上,在此示例中,它根本不需要括号。

答案 1 :(得分:0)

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

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

因此,当支票数量超过5张时,您应该选择第二种选择。

注意::如果多个if没有每次调用返回,则表示2个或更多ifs为真。