高效的编程技术

时间:2012-05-17 18:15:13

标签: java standards

我正在编写一个方法,并想知道附加的代码是否有效,具体取决于它的编写方式:

    public boolean isThreeOfKind(PlayingCard[] hand)
    {
//            if(hand[0].getRank() == hand[2].getRank())
//                return true;
//            else if(hand[1].getRank() == hand[3].getRank())
//                return true;
//            else if(hand[2].getRank() == hand[4].getRank())
//                return true;

        return (hand[0].getRank() == hand[2].getRank() || 
                hand[1].getRank() == hand[3].getRank() || 
                hand[2].getRank() == hand[4].getRank());
    }

因为你可以看到我有一个if else if语句被注释掉了,一个return语句基本上做同样的事情,哪个更有效并且根据编码标准?

4 个答案:

答案 0 :(得分:9)

效率没有差别,但风格有明显差异,第二个更好。但是,这个特殊的逻辑真的只是

for (int i = 0; i < 3; i++) 
  if (hand[i].getRank() == hand[i+2].getRank()) return true;
return false;

答案 1 :(得分:3)

CodeReview这类问题可能会更好,因为它更多的是一种观点。但在我看来,阅读未评论的部分要容易得多,性能不应该担心,直到它成为一个问题(特别是在这样的事情)。有关详细信息,请参阅维基百科上的程序优化文章,尤其是When to Optimize部分。

答案 2 :(得分:0)

正如杰弗瑞所说,我认为在这种情况下,可读性比效率更有价值(我不认为这是一个普遍的规则)。

您可能对名为Short-Circuit Evaluation的概念感兴趣。请注意 ||是Java中的短路运算符。因此,如果第一个语句为真,您将获得与if语句相同的效果(其他两个将不会被评估)。

话虽如此,我不确定这两行代码是否编译成相同的函数(它们可能取决于编译器实现)。 如果他们没有编译相同,第二个可能会更快。

答案 3 :(得分:0)

或者,如果您只想在方法和数组边界检查中使用一个退出点:

boolean found = false;
for (int i = 0; !found && i < hand.length - 2; i++) 
    found = (hand[i].getRank() == hand[i + 2].getRank());
return found;