Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
for (NSString *str in ar)
{
if ([startChord isEqualToString:str])
{
if (offset > 0)
{
if (i+offset > 11) // 11 - последний индекс в массиве
finalChord = [ar objectAtIndex:(i+offset) - 12];// (12 = 11+1) это чтобы понятно было, например, 11 элемент сместить на 2 выше, это будет 11+2 - 12 равно 1 индекс в массиве (т.е. второй элемент)
else
finalChord = [ar objectAtIndex:(i+offset)];
}
else if (offset < 0)
{
if (i-abs(offset) < 0) // 0 - первый индекс в массиве
finalChord =[ar objectAtIndex:12 - abs(i-abs(offset))];
else
finalChord = [ar objectAtIndex:(i-abs(offset))];
}
else
{
finalChord = [ar objectAtIndex:i];
}
break;
}
i++;
}
Не всегда, следует понимать, что
[ar indexOfObject:startChord];
и
[startChord isEqualToString:str]
Это разные вещи. Конечно если не рассматривается ситуация, по которой startChord - это ссылка на элемент массива
Так что результат для isEqual и isEqualToString будет одинаков, пожалуй только 2й побыстрее наботать будет. Но не на столько, чтобы экономить на 12ти сравнениях...
Собственно я даже не знаю, корректен ли этот код с точки зрения логики изначально - я на гитаре играть не пробовал даже.
делает то же самое
[ar indexOfObject:startChord];
и
[startChord isEqualToString:str]
Это разные вещи. Конечно если не рассматривается ситуация, по которой startChord - это ссылка на элемент массива
NSArray *ar = [[NSArray alloc] initWithObjects:@"A", @"A#", @"B", @"C", @"C#", @"D", @"D#", @"E", @"F", @"F#", @"G", @"G#", nil];
Так что результат для isEqual и isEqualToString будет одинаков, пожалуй только 2й побыстрее наботать будет. Но не на столько, чтобы экономить на 12ти сравнениях...
Собственно я даже не знаю, корректен ли этот код с точки зрения логики изначально - я на гитаре играть не пробовал даже.
Собственно, это код транспанирования.