Чтобы продвинуть хорошие навыки программирования и повысить эффективность моего кода (читай: «Мы с братом спорим из-за кода»), я предлагаю этот вопрос опытным программистам:
Какой блок кода "лучше"?
Для тех, кто не может прочесть код, стоит ли ставить условие внутри цикла 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. Я понимаю, что на самом деле это не имеет большого значения, это главным образом для того, чтобы помочь мне понять, насколько дорогими являются условные утверждения. (Читайте: я просто хочу знать, прав ли я.)