優れたプログラミング習慣を促進し、コードの効率を高めるために(「兄と私はいくつかのコードについて議論しています」を読んでください)、経験豊富なプログラマーにこの質問を提案します。
「より良い」コードのブロックはどれですか?コードを読むのが面倒な人にとって、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回の反復で実行されます。それほど重要ではないことを理解しています。これは主に、条件文がどれほどコストがかかるかを正確に理解するのに役立つためです。(読んでください:私は自分が正しいかどうか知りたいだけです。)