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

    −104

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    // create the scroll view
    UIScrollView *scr = [[UIScrollView alloc] initWithFrame:self.bounds];
    self.dayScroll = scr;
    [scr release];
    [self addSubview:self.dayScroll];
    
    scr = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
    self.allDayScroll = scr;
    [scr release];
    [self addSubview:self.allDayScroll];

    Почему бы не использовать локальную переменную несколько раз?

    Запостил: ivanzoid, 27 Ноября 2012

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

    • "Спички надо экономить!" (Новый Робинзон)
      Ответить
    • > Почему бы не использовать локальную переменную несколько раз?
      Какая-то паскалистская привычка. Чтобы до var'а каждый раз не скроллить.
      Ответить
      • В паскале все правильно сделали.

        Там так неудобно заводить новые переменные, что легче делать маленькие функции.
        Ответить
        • Тем не менее, многие дельфины толерантны к длине функций, и просто не заводят новые переменные, юзая старые по второму разу.
          Ответить
          • Это от неопытности. В сишке с этим ещё хуже, наращивать функцию, вводя новые переменные прям на месте, не мешает никто, к тому же из-за запрета на локальные функции приходится копипастить некоторые фрагменты.
            Ответить
            • Да об этом я и говорил и именно за это уважаю паскаль, оберон и, конечно, их автора - Никлауса Вирта.

              Вместо того, чтобы усложнять синтаксис и делать из Си - кресты, он с каждым новым языком упрощал синтаксис, наращивая мощь и выразительность.

              Если посмотреть цепочку Алгол* - Паскаль - Модула 2 - Оберон - Оберон 2 то сразу станет видно, что Вирт шел по пути упрощения языка и Оберон действительно очень прост и красив.

              * к Алголу он имеет только косвенное отношение, но при этом Паскаль основан на базе Алгола.
              Ответить
          • Правила хорошего кода (распечатать, повесить на стену):

            1. Не используйте функции. Копипастьте поторяющиеся куски и никогда не выделяйте самостоятельный код в процедуры с говорящими названиями.

            2. Используйте только глобальные переменные с простыми именами, вроде a, b, x, t.

            3. Старайтесь составлять как можно более сложные выражения в своем коде. Тогда все поймут, какой вы крутой программист.

            4. Не тратьте впустую пробелы и переводы строк. Чем меньше пустого места в программе, тем лучше.

            5. Ищите интересные выходы из самых обычных ситуаций. Например для проверки булевого значения, переведите его в строку и проверьте длину.

            6. Не позволяйте компилятору самому вычислять константы, используйте калькулятор и прописывайте в коде результаты выражений (1440 вместо 24*60).

            7. Пишите как можно больше комментариев. Представьте, что программа, это ваш личный дневник, выписывайте все, что только придет в голову! Также не забудьте оставить пометки на будущее, вроде
            x = 2; //присваиваем переменной икс значение два

            Если вы будете соблюдать все эти правила, ваш код будет очень трудным для понимания и все будут считать вас крутым программистом. Удачи!
            Ответить
            • > a, b, x, t
              Имхо, на первом месте по использованию знаменитая "i".
              Ответить
              • i это стандартное обозначение индекса в математике, ничего плохого в использовании локальной i, j, k в небольших циклах for по матрице я не вижу.
                Ответить
              • А еще обязательно нужно описать переменные I, l, и O.
                Ответить
                • Главное писать НЕ так:
                  for ( int digit = 0; digit <= 9; ++digit ) // Для всех цифр (0-9)
                  {
                    ss << char('0' + digit); // Переводим цифру в ее символьное представление
                  }


                  А ТАК:
                  for(x=0;x<10;++x)//цикел ффор с икса от нулика до десяточки (не включая десяточку)
                  {ss<<(char)x+48;//прибавляем к иксу 48 и кастим в чаррр
                  }
                  Ответить
                  • for (l=0; l<10; ++l) {
                        for (I=0; I<10; ++I) {
                            a[I][l] = b[l][I];
                        }
                    }
                    Кстати, слабо написать [I] (заглавная i в скобках)? ;)
                    Ответить
                    • > Кстати, слабо написать [i] (заглавная i в скобках)? ;)

                      Что бы это еще значило?
                      Ответить
                      • int I = 10;
                        a[I] = 10;
                        a[I] = 10;
                        Ух ты, можно подсвечивать нужные места в коде.
                        Ответить
                        • А. Ты про то, что это открывающий тег. Ну попробую:
                          [I]
                          Ответить
                        • И кстати, загляни в шахматы, там один шаг от играющего движка. Но проблема появилась.
                          Ответить
                          • Ну уж допиливать perft мне совсем не хочется... Его же тоже придется об что-то тестировать, и получаем рекурсию ;)

                            Лучше поищи что-то готовое, что выдает только валидные позиции.
                            Ответить
                            • Так это нужно не только в перфте. В минимаксе/альфабете тоже понадобится проверка на легальность хода.

                              Или тупо давать жрать короля и выдавать минус 100500?
                              Ответить
                              • А, мне показалось, что в оригинальном perft'е не было проверки...

                                Ну как проверить - после нашего хода король не должен быть под шахом. Поэтому для проверки запускаем поиск ходов противника, если среди них есть рубящий короля - значит наш ход невалиден. Если не туплю - этого достаточно.
                                Ответить
                                • Там не было, ибо perft описывается для полностью легального генератора. Но полностью легальный генератор во-первых сложнее, во вторых - он медленее на порядок.

                                  А то, что сейчас у меня есть итак тормозит (правда не так сильно как я ожидал).

                                  Ну и конечно, я уже добавил проверку, просто perft теперь рекурсивно обходит не все, а только легальные позиции. Ну и нарвался на кучу багов. Буду ловить, фиксить и через 2-3 дня уже будет готов поиск, тогда погоняю его на паре позиций, отрефакторю, пройдусь профайлером, оптимизирую, еще раз отрефакторю и пойду наконец учить лисп.
                                  Ответить
            • >6. Не позволяйте компилятору самому вычислять константы, используйте калькулятор и прописывайте в коде результаты выражений (1440 вместо 24*60).

              $ php -r "class A { const C = 24*60; } echo A::C;"
              
              Parse error: syntax error, unexpected '*', expecting ',' or ';' in Command line code on line 1


              $ php -r "class A { const C = 1440; } echo A::C;"
              1440


              Такие дела.
              Ответить
              • да, я тоже сталкивался с тем, что пхп не может в вычисления при объявлении констант, ещё один повод его не любить
                Ответить
              • В #12196 ещё был пример, когда VB не смог вычислить 1.0/0.0 в качестве константы, но смог, когда делимое или делитель были переменными.

                Ещё Турбо Паскаль по-разному производит вычисления с вещественными в рантайме и в компайлтайме.
                Ответить
                • Компилятор VC++ 6.0, помнится, на чем-то подобном падал с INTERNAL_COMPILER_ERROR при включенной оптимизации.
                  int x = 0;
                  int y = 1/x;
                  Ответить
              • Хм. Так PHP проверяет соблюдение 6-го правила...
                Ответить
    • -Да, мамочка, ты классная блядь! Юрка принялся целовать маму взасос…
      Ответить

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