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