2013-02-28 39 views
0

我有一个方法有条件地调用另一个。例如:单线如果包含方法调用

public boolean contionallyDoSomething(boolean something){ 
    boolean didSomething = false; 
    if(something){ 
     theSomething(); 
     didSomething = true; 
    } 
    return didSomething; 
} 

public void theSomething(){ 
    //do something 
} 

我想我可以这样重新写:

public boolean contionallyDoSomething(boolean something){ 
    boolean didSomething =something && theSomething(); 
    return didSomething; 
} 

public boolean theSomething(){ 
    //do something 
    return true; 
} 

第二种方法感觉好多整洁和我个人很喜欢它。不过,我有点厌倦编写这样的代码,它可能会回来咬我。什么是反面?有什么优点/缺点?

感谢

+2

我假设你想在第一节中将“didSomething”初始化为false?确实是 – cmonkey 2013-02-28 14:35:27

+0

。更正,谢谢 – crunchBar 2013-02-28 14:36:09

+3

你的代码无效,因为'theSomething()'返回void - 你不能用它作为'&&'操作符的RHS。 – 2013-02-28 14:36:38

回答

1

这个代码最大的缺点,特别是如果它是一家致力于共享资源库是可读性。 if statement branching很容易将意图呈现在哪里,因为压缩代码需要第二次查看(仅用于凡人)来破译它正在做的事情。

至于优点,你可以编写更少的代码,并且在一定程度上编译器会优化运行速度。

0
public boolean contionallyDoSomething(boolean something) { 
    if (something) { 
     theSomething(); 
    } 
    return something; 
} 

当然,这样做更有意义,而不是返回第二个布尔值,它将与通过的布尔值相同?

+0

我现在纠正了它。对不起...太多的Ctrl + Z/Y! – crunchBar 2013-02-28 14:37:39

+0

你错过了这一点,你仍然会得到两个完全相同的布尔值。 'something'和'didSomething'永远不会有区别。 – Rawkode 2013-02-28 14:38:44

+0

当然他们会在这种情况下。但是这种语义是不同的。 – crunchBar 2013-02-28 14:41:18

0

你涉水到主观的水域。所有的优点和缺点都与可读性有关。就我个人而言,我会更进一步,并将其写入:

public boolean contionallyDoSomething(boolean something) { 
    return something && theSomething(); 
} 

但是,我发现代码中的紧密性增加了可读性。其他人可能(也会)不同意。

相关问题