为了培养良好的编程习惯,提高我的代码效率(阅读:《我哥和我在争论一些代码》),我向有经验的程序员提出这个问题:

哪个代码块“更好”?
对于那些懒得阅读代码的人来说,是否值得在 for 循环中放置一个条件来减少冗余代码的数量,而不是将它放在外面并进行 2 个 for 循环?两段代码都有效,问题是效率与可读性。

    - (NSInteger)eliminateGroup {
            NSMutableArray *blocksToKill = [[NSMutableArray arrayWithCapacity:rowCapacity*rowCapacity] retain];
            NSInteger numOfBlocks = (NSInteger)[self countChargeOfGroup:blocksToKill];
            Block *temp;
            NSInteger chargeTotal = 0;

//Start paying attention here

            if (numOfBlocks > 3)
                for (NSUInteger i = 0; i < [blocksToKill count]; i++) {
                    temp = (Block *)[blocksToKill objectAtIndex:i];
                    chargeTotal += temp.charge;
                    [temp eliminate];
                    temp.beenCounted = NO;
                }
            }
            else {
                for (NSUInteger i = 0; i < [blocksToKill count]; i++) {
                    temp = (Block *)[blocksToKill objectAtIndex:i];
                    temp.beenCounted = NO;
                }
            }
            [blocksToKill release];
            return chargeTotal;
        }

或者...
        - (NSInteger)eliminateGroup {
            NSMutableArray *blocksToKill = [[NSMutableArray arrayWithCapacity:rowCapacity*rowCapacity] retain];
            NSInteger numOfBlocks = (NSInteger)[self countChargeOfGroup:blocksToKill];
            Block *temp;
            NSInteger chargeTotal = 0;

//Start paying attention here

            for (NSUInteger i = 0; i < [blocksToKill count]; i++) {
                temp = (Block *)[blocksToKill objectAtIndex:i];
                if (numOfBlocks > 3) {
                    chargeTotal += temp.charge;
                    [temp eliminate];
                }
                temp.beenCounted = NO;
            }
            [blocksToKill release];
            return chargeTotal;
        }

请记住,这是为了游戏。该方法在用户双击屏幕时调用,for 循环通常运行 1 到 15 次迭代,最多 64 次。我知道这真的没有那么重要,这主要是为了帮助我准确了解条件语句的成本。 (阅读:我只是想知道我是否正确。)

最佳答案

如果不定义您对“更好”的要求,就无法回答这个问题。是运行时效率吗?编译大小?代码可读性?代码可维护性?代码可移植性?代码可重用性?算法可证明性?开发效率? (请对我错过的任何流行测量留下评论。)

有时,绝对运行时效率才是最重要的,但并不像人们通常想象的那样频繁,因为您在问题中点头表示同意——但这至少很容易测试!通常它是所有这些问题的混合体,最终您必须做出主观判断。

这里的每个答案都应用了这些方面的个人组合,人们经常陷入激烈的圣战,因为每个人都是对的——在正确的情况下。这些方法最终都是错误的。唯一正确的方法是 定义对您来说重要的 ,然后 衡量它

10-08 11:59
查看更多