gpt4 book ai didi

objective-c - 哪个代码块是 'better' ?

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:15 25 4
gpt4 key购买 nike

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

哪个代码块“更好”?对于那些懒得阅读代码的人来说,是否值得在 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 次。我知道这真的没那么重要,这主要是为了帮助我准确了解条件语句的成本。 (阅读:我只是想知道我是否正确。)

最佳答案

第一个代码块更清晰、更高效,因为在整个迭代过程中检查 numOfBlocks > 3 为真或假。

第二个代码块避免了代码重复,因此可能带来的风险较小。然而,它在概念上更复杂。

第二 block 可以通过添加来改进

bool increaseChargeTotal = (numOfBlocks > 3)

在循环之前,然后使用这个 bool 变量而不是循环内的实际检查,强调在迭代期间它不会改变的事实。

就个人而言,在这种情况下,我会投票给第一个选项(重复循环),因为循环体很小,这清楚地表明条件在循环之外;此外,它更高效并且可能符合“快速处理常见情况”的模式。

关于objective-c - 哪个代码块是 'better' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1056563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com