几周前,我提交了一个函数,用于代码评审,该函数如下所示。
Function{
If (condition)
Else If (condition)
Else if (condition)
Else
return value
}负责对代码进行评审的负责人说:“我讨厌其他的方法”,但他没有说为什么,也没有说我应该做些什么。他只是允许我上传这个功能。
我的问题是,除了一堆“其他假设”之外,还有哪些替代方案可以使代码看起来更优雅,并可能更好地执行呢?
我试着拔出他的代码,想知道他会做什么,我注意到他做了几次。
If (condition)
If (condition)
If (condition)我应该避免写“否则”吗?我本打算问他的,但他已经不在这里工作了。
谢谢
发布于 2016-02-05 18:29:06
我尽量避免“其他”、“其他如果”和“如果”和"for“。在我看来,分支和循环增加了代码的复杂性。但每次都取决于你想做什么。下面是一些例子:
如果你这样做的话:
if fruit.isBanana() then fruit.eatBanana()
else if fruit.isOrange() then fruit.eatOrange()
...而不是这样,您可以使用继承:
class Banana extends Fruit {
function eat() {
... yum yum yum banana ...
}
}
class Orange extends Fruit {
function eat() {
... yum yum yum orange ...
}
}然后,如果您有一个实例:
fruit.eat()另一个例子:如果您使用" If“和" for”进行过滤:
longFruits = []
for fruit in fruits {
if fruit.isBanana() then longFruits.add(fruit)
}然后您可以使用集合来代替:
longFruits = CollectionUtils.select(fruits, Precicate.isBanana)这只是几个例子和技术。
发布于 2016-02-05 17:16:27
你可以用开关。
switch (variable) {
case 1:
doSomething();
break;
case 2:
doSomething();
break;
case 3:
doSomething();
break;
default:
doSomething();
break;
}https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html
发布于 2016-02-05 18:13:02
噢,我误解了你的问题,所以你可能已经知道了,但无论如何:
这就是它的工作原理:
示例1如果您的程序如下所示:
if(condition1){ doThing1(); }
else if(condition2){ doThing2(); }
else if(condition3){ doThing3(); }
else{ doThing4() }
done();您的程序将首先检查condition1是否为真。如果是的话,它将运行doThing1()方法。之后,它将不检查condition2或condition3,并将直接转到done()-method。
如果condition1为false,程序将检查condition2是否为真。如果是的话,它将运行doThing2()方法,然后直接转到done()-method。
如果condition1和condition2为false,程序将检查condition3是否为真,如果为真,则运行doThing3()-method。
如果没有任何条件为真,它将运行doThing4()方法,然后运行done方法。
例2:但是,如果您的程序如下所示:
if(condition1){ doThing1(); }
if(condition2){ doThing2(); }
if(condition3){ doThing3(); }
done();程序首先检查condition1是否为真,如果为真,则运行doThing1()方法
然后检查condition2是否为真,如果为真,则运行doThing2()-method
然后检查condition3是否为真,如果为真,则运行doThing3()-method
最后,它运行done()-method。
区别在于,在示例1中,程序不检查condition2或condition3是否为真,而在示例2中,程序总是检查所有条件。这意味着在示例1中,只运行一个方法doThing1()、doThing2()、doThing3()和doThing4()。但是,在示例2中,如果不止一个条件为真,则程序将运行多个方法。
尝试编写一个简单的程序,在其中使用两个示例并将doThing1();更改为System.out.println(“1”)等,并在不理解我的答案的情况下尝试不同的值组合(真或假)。
https://stackoverflow.com/questions/35229808
复制相似问题