为了培养良好的编程习惯,提高我的代码效率(阅读:《我哥和我在争论一些代码》),我向有经验的程序员提出这个问题:
哪个代码块“更好”?
对于那些懒得阅读代码的人来说,是否值得在 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 次。我知道这真的没有那么重要,这主要是为了帮助我准确了解条件语句的成本。 (阅读:我只是想知道我是否正确。)
最佳答案
如果不定义您对“更好”的要求,就无法回答这个问题。是运行时效率吗?编译大小?代码可读性?代码可维护性?代码可移植性?代码可重用性?算法可证明性?开发效率? (请对我错过的任何流行测量留下评论。)
有时,绝对运行时效率才是最重要的,但并不像人们通常想象的那样频繁,因为您在问题中点头表示同意——但这至少很容易测试!通常它是所有这些问题的混合体,最终您必须做出主观判断。
这里的每个答案都应用了这些方面的个人组合,人们经常陷入激烈的圣战,因为每个人都是对的——在正确的情况下。这些方法最终都是错误的。唯一正确的方法是 定义对您来说重要的 ,然后 衡量它 。