1. Objective C / Говнокод #11953

    −105

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    if (indexPath.row==0 && indexPath.section==0) {
      // ...
    } else if (indexPath.row==1 && indexPath.section==0) {
      // ...
    } else if (indexPath.row==0 && indexPath.section==2) {
      // ...
    } else if (indexPath.section == 2 && indexPath.row == 1) {
      // ...
    }

    В оригинале еще и оформление кода абсолютно шизофреническое. Откуда только такие берутся?

    Запостил: byss, 18 Октября 2012

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

    • Из какого ты города?
      Если Калининград - боюсь, к вам перешел мой бывший коллега.
      Ответить
    • А что не так, я вкурить не могу ?
      Ответить
      • Порядок перечисления полей кривой.
        Ответить
        • И еще section проверяется четыре раза четыре раза четыре раза четыре раза.
          Ответить
          • Ну от этого не уйти, если во всех 4 ветках разные вещи.
            Можно только
            if a=1 
              if b=0
              else if b=2
            else if a=1
              if b=0
              else if b=2
            Ответить
            • Таблица указателей на функции
              Ответить
              • f[a][b]()
                Ответить
                • функциональные матрицы
                  Ответить
                • Не забудь a и b проверить на диапазон допустимости. А то после ввода пользователя, загрузки поправленного пользователем конфига, изменения кода или тд. на месте этого кода появится маленькая черная дыра, которая затянет туда всё приложение в неуправляемой среде. В прочем в управляеой среде тоже последствия с падением могут быть.
                  Ответить
              • Дык да, switch, ЕМНИП, примерно так и работает, только там таблица jmp'ов (могу нести бред).
                Ответить
                • Таблица джампов, только если справится оптимизатор. А это от компилятора и от кода свича зависит. Также может сделать, кроме цепочки if else с О(n) ещё и комбинацию if else с делением пополам О(log n).
                  Ответить
                  • Еще бывает две таблицы: первая - массив из байтов, которые являются индексами элементов во второй, а вторая уже адреса на которые прыгать. Если не туплю, то такую штуку генерило толи gcc толи визуалка для кода в духе
                    case 1:
                    case 2:
                    case 3:
                        // do 1
                        break;
                    case 4:
                    case 5:
                    case 6:
                        // do 2
                        break;
                    Ответить
                    • Все эти таблицы для предсказателя ветвлений и соответственно конвеера и кеша кода не френдли. Ну а большие таблицы так ещё и для кеша данных не френдли. Для малого числа кейсов лучше О(log n) вариант.
                      Ответить
                      • Да свич сам по себе не дружит с предсказателем, конвейером и кешем кода. Что с таблицами, что без таблиц.

                        Причем, если альтернативы в свиче равновероятны, то с таблицей будет всего одна перезагрузка конвейера, а с деревом сравнений и переходов, которое работает за O(log n) скорее всего предсказатель затупит несколько раз подряд (с матожиданием n/2). Плюс эта табличка весит меньше чем полноразмерная (и уж тем более чем дерево ветвлений на cmp/jg) - а значит даст меньшую нагрузку на кеши (особенно кода).

                        Поэтому бабушка надвое сказала, что эффективней.
                        Ответить
            • Ну в этом-то варианте section проверяется только два раза. Если впилить switch, то вообще один.
              Ответить
            • Тут опечатка, но вы поняли.
              Ответить
        • Тут еще нужно знать, из какого метода этот кусок кода.
          Вариантов немного, на 90% это либо создание ячейки (и тогда эту херню надо было выносить в конструкторы кастомных ячеек), либо обработка тапа по ячейке (тогда это пример шизофренической навигации).
          Ответить
          • Именно тап. Так это таблица настроек, естественно по тапу на различнных ячейках открываются различные VC'шки.
            Ответить
            • Ну т.е. по-вашему мнению проблема только в порядке перебора?
              Можно как-то поаккуратней делать настройки все же, группировать, создавать более-менее универсальные VC (особенно когда речь идет о всяких эбаутах и прочем) и т.д.
              Хотя приходится согласиться, что это не всегда реально.
              Ответить
    • >Откуда только такие берутся?
      Из жопы.
      Ответить

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