更干净的代码:重新考虑多个嵌套if语句
本文关键字:嵌套 if 语句 新考虑 代码 | 更新日期: 2023-09-27 18:22:48
我有这样的代码:
if(condition1)
{
//do some stuff
if(condition2)
{
//do some other stuff
if(condition3)
{
//do some more stuff
if(condition4)
{
//you probably got the point by now...
}
}
}
我想把它重新考虑到看起来更好、更容易遵循的代码中
到目前为止,我得到的最好的是:
do{
if(!condition1){break;}
//do some stuff
if(!condition2){break;}
//do some other stuff
if(!condition3){break;}
//do some more stuff
if(!condition4){break;}
//you probably got the point by now...
}while(false);
我的问题是:
还有其他更好的方式让我失踪吗?
我不认为这是相关的,但我正在使用C#。。。
可能将每个布尔条件所需的功能封装到一个方法中,并使用该方法而不是指定条件1、条件2、条件3等。
private boolean isRed() {
//do some stuff
}
private boolean isBlue() {
//do some other stuff
}
private boolean isGreen() {
//do some more stuff
}
...
if(isRed() && isBlue() && isGreen()) {
//do some more stuff
}
由于您使用的是C#,@dseibert的思想可以进一步扩展,并使用委托(在本例中为Func)使其变得灵活。您可以创建一个包含Func的列表,并根据需要添加任意数量的带有签名的函数bool函数(void),然后使用LINQ评估所有函数的结果。
要玩的三个示例功能:
private bool isRed()
{
System.Console.WriteLine("red");
return true;
}
private bool isBlue()
{
System.Console.WriteLine("blue");
return false;
}
private bool isGreen()
{
System.Console.WriteLine("green");
return true;
}
列出包含Funcs的列表,其中填充了测试功能和初始化结果:
var actions = new List<Func<bool>>();
actions.Add(() => isRed());
actions.Add(() => isGreen());
actions.Add(() => isBlue());
var result = true; // initial value
一次评估所有功能:
actions.ForEach(a => result &= a());
System.Console.WriteLine(result);
现在,您只需要创建一个新方法并将其添加到列表中。
这种解决方案的缺点是,即使结果已经为false,也总是调用每个方法,但ForEach扩展方法中的代码可以进行优化。