Субъективный Си / Говнокод #8109 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
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++;
}

Но человек старался, да...

Запостил: krypt krypt, (Updated )

Комментарии (5) RSS

    • int i = [ar indexOfObject:startChord];
      finalChord = [ar objectAtIndex:(i + offset + 12) % 12];

      делает то же самое
      Ответить
      • Не всегда, следует понимать, что
        [ar indexOfObject:startChord];
        и
        [startChord isEqualToString:str]
        Это разные вещи. Конечно если не рассматривается ситуация, по которой startChord - это ссылка на элемент массива
        Ответить
        • В данном случае ar - это массив из 12ти строк (гитарные аккорды), startChord - тоже строка.

          NSArray *ar = [[NSArray alloc] initWithObjects:@"A", @"A#", @"B", @"C", @"C#", @"D", @"D#", @"E", @"F", @"F#", @"G", @"G#", nil];

          Так что результат для isEqual и isEqualToString будет одинаков, пожалуй только 2й побыстрее наботать будет. Но не на столько, чтобы экономить на 12ти сравнениях...

          Собственно я даже не знаю, корректен ли этот код с точки зрения логики изначально - я на гитаре играть не пробовал даже.

          Собственно, это код транспанирования.
          Ответить
  • int i = 0 в самом начале потерялось, но уже не поправить
    Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8