首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分支效率

分支效率
EN

Stack Overflow用户
提问于 2016-02-05 17:13:55
回答 5查看 88关注 0票数 0

几周前,我提交了一个函数,用于代码评审,该函数如下所示。

代码语言:javascript
复制
Function{
If (condition)
Else If (condition)
Else if (condition)
Else
return value
}

负责对代码进行评审的负责人说:“我讨厌其他的方法”,但他没有说为什么,也没有说我应该做些什么。他只是允许我上传这个功能。

我的问题是,除了一堆“其他假设”之外,还有哪些替代方案可以使代码看起来更优雅,并可能更好地执行呢?

我试着拔出他的代码,想知道他会做什么,我注意到他做了几次。

代码语言:javascript
复制
If (condition)
If (condition)
If (condition)

我应该避免写“否则”吗?我本打算问他的,但他已经不在这里工作了。

谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-02-05 18:29:06

我尽量避免“其他”、“其他如果”和“如果”和"for“。在我看来,分支和循环增加了代码的复杂性。但每次都取决于你想做什么。下面是一些例子:

如果你这样做的话:

代码语言:javascript
复制
if fruit.isBanana() then fruit.eatBanana()
else if fruit.isOrange() then fruit.eatOrange()
...

而不是这样,您可以使用继承:

代码语言:javascript
复制
class Banana extends Fruit {
    function eat() {
        ... yum yum yum banana ...
    }
}
class Orange extends Fruit {
    function eat() {
        ... yum yum yum orange ...
    }
}

然后,如果您有一个实例:

代码语言:javascript
复制
fruit.eat()

另一个例子:如果您使用" If“和" for”进行过滤:

代码语言:javascript
复制
longFruits = []
for fruit in fruits {
    if fruit.isBanana() then longFruits.add(fruit)
}

然后您可以使用集合来代替:

代码语言:javascript
复制
longFruits = CollectionUtils.select(fruits, Precicate.isBanana)

这只是几个例子和技术。

票数 1
EN

Stack Overflow用户

发布于 2016-02-05 17:16:27

你可以用开关。

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2016-02-05 18:13:02

噢,我误解了你的问题,所以你可能已经知道了,但无论如何:

这就是它的工作原理:

示例1如果您的程序如下所示:

代码语言:javascript
复制
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:但是,如果您的程序如下所示:

代码语言:javascript
复制
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”)等,并在不理解我的答案的情况下尝试不同的值组合(真或假)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35229808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档