考虑这段代码 -
if(enable) {
if(enableCar) {
// do something
} else if(enableComputer) {
// do something
} else if(enableTV) {
// do something
} else {
otherChoice();
}
} else {
otherChoice();
}
// More code here so return isn't possible
我应该如何避免这么多else
语句,我无法删除if(enable)
,因为carEnable
可以返回true,而enable
本身则为false。
我不能使用return,因为我有更多代码
那么我应该如何避免这么多else
陈述?
当然这只是一个例子:)
由于
答案 0 :(得分:2)
您尚未完全明确要求,但我认为您的要求需要switch阻止。
[修改]:之后添加了Java
的代码 - 您可以使用enum
进行此操作。
答案 1 :(得分:1)
您可以将选项添加到枚举中并将其传递给开关。
public enum EnableOptions
{
enableCar,
enableComputer,
enableTV
}
然后为该选项创建一个变量并将其传递给开关:
EnableOptions option = EnableOptions.enableCar;
if(enabled)
{
switch(option)
{
case EnableOptions.enableCar:
//method
break;
case EnableOptions.enableComputer:
// methods
break;
etc... for all of your options
default:
//something
break;
}
}
答案 2 :(得分:0)
您还可以尝试在结尾处使用else if
和一个else
if (enableCar) {
// do something
}
else if (enableComputer) {
// do something
}
else if (enableTV) {
// do something
} else {
otherChoice();
}
答案 3 :(得分:0)
伪代码缺少很多信息。有时使用多态性可以避免级联if ... else
。看一下this主题。并阅读有关replacing conditionals with polymorphism的文章。
答案 4 :(得分:0)
实际上,良好的结构分析是一种通用的方法,如何摆脱if-else语句,因为结构本身包含一些信息,你必须用你的if-else语句来决定。
所以你应该考虑你应该需要哪些课程以及他们有哪些责任和变种。你的例子太抽象了,所以我不能告诉你你应该做些什么。
例如 - 您应该考虑命令模式:http://www.oodesign.com/command-pattern.html
然后你可以使用“commad.do()”并且命令本身知道,该做什么,因为每个命令都有自己的功能。
答案 5 :(得分:-2)
您可以创建一个开关语句
if(enable)
{
switch()
{
case enableCar:
// do some code
break;
case enableComputer:
//do some code
break;
}
}