嵌套 if 条件与多个单独的 if 条件(每个条件均包含 return 语句)

Moh*_*sen 7 .net c# 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;
}
Run Code Online (Sandbox Code Playgroud)

小智 1

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

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

第二个例子也不太可能因支架错位而混淆。事实上,在这个例子中它根本不需要任何大括号。