以下两个函数中最专业的代码样式是什么?
而且如果功能变得更复杂,更大,例如要进行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;
}
答案 0 :(得分:0)
第二个示例在阅读代码时应该需要更少的认知开销。
在第一个示例中,您需要保留程序状态的“堆栈”。在第二个示例中,您只需要保留一份您已经知道是真的事情的清单。
第二个例子也不太可能因放错位置的支架而感到困惑;实际上,在此示例中,它根本不需要括号。
答案 1 :(得分:0)
我遵循的一条黄金法则是尽力避免嵌套。
使用使代码更易于阅读和理解的代码。仅在两种情况下,第一种方法更具逻辑性和可读性。与&&,||关联的5或6个条件可能不再是这种情况和!。
因此,当支票数量超过5张时,您应该选择第二种选择。
注意::如果多个if没有每次调用返回,则表示2个或更多ifs为真。