1. C++ / Говнокод #7216

    +152

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    //сглаживание ланшафта
            for(int i=0;i!=xsize;i++)
            {
                for(int j=0;j!=ysize;j++)
                {
                    //для левого верхнего угла
                    if(i==0&&j==0)
                    {
                        int* arr = new int[2] // -_- where is ";"?
                        arr[0] = val[i][j++]; // ???
                        arr[1] = val[i++][j]; // 0_0
                        arr[2] = val[i++][j++]; // ???????
                        val[i][j] = getMiddle(arr);
                        delete[] arr;
    
                    };
                    //lot's of code...
                    //govnocode, govnocode, govnocode...
                    //...
              }
        }

    Фрагмент из генератора ландшафта написанного другом. Коментарии на англе мои.

    Запостил: HiTECNOLOGYs, 09 Июля 2011

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

    • > Коментарии на англе мои
      > //govnocode, govnocode, govnocode...

      Одно из двух: либо друг сознательный и понимает что пишет то ещё говно. Или "англ" это не то что я думаю.
      Ответить
      • Друг упорно уверял что тут все норм. А написал я так так как там еще овер дохуя кода(в том же стиле) и все не написать. Написал так чтобы подчернуть говняность сего кода. Так вот. Надеюсь понятно выразился. Логиниться лень.
        Ответить
    • В силу всего вышесказанного предлагаю первую строчку читать так:
      //сглажевание ланшафта
      Ответить
      • //сгаживание ланшафта

        P.S. какую цель преследовали английские комментарии?
        Ответить
        • Указать где стоит смеяться =) да и просто хотелось выразить свое недоумение и шок.
          Ответить
    • Строчка с 9ой на 10ую не скомпилится. Даже в комментарии это указано
      Ответить
    • То есть вместо того, чтобы помочь начинающему, указать на очевидные ошибки и рассказать, к каким нехорошим последствиям они приведут, вы решили просто обосрать его на говнокоде? Поздравляю, мир возможно потерял программиста, а вы — друга.
      Ответить
      • показать все, что скрытоДа он мне не совсем друг, а просто знакомый. У меня просто у самого завались работы по говнокодингу и помогать просто некогда. Я ему об этом сразу сказал, чтобы он мне дал уже отлаженный, оптимизированный, нормальный код. Да, но конечно это не очень хорошо, как я сделал. Я — плохой человек...
        Ответить
    • показать все, что скрытоИзменение управляющей переменной цикла for внутри тела цикла? В нормальных языках это запрещено.
      Ответить
      • показать все, что скрытоГовноязык же!
        Ответить
      • Что здесь запрещённого и на каких основаниях?
        Ответить
        • А нафига менять переменную цикла внутри цикла? Это же чистый говнокод, нарушение логики цикла.
          Ответить
          • Какие серьёзные основания для запрета? То, что старая дельфа\паскаль может зависнуть от таких безобидных действий - не основание.
            Ответить
            • А какие серьёзные основания для избегания GOTO?

              > То, что старая дельфа\паскаль может зависнуть от таких безобидных действий - не основание.

              Да ты же троллишь.
              Ответить
              • Да, троллю! И да, про не работу паскаля\дельфы в таких условиях, знаю.

                >А какие серьёзные основания для избегания GOTO?
                Нет разбивки программы на мелкие элементы, а значит разобраться человеку в ней намного сложнее. Мозг человека устроен так, что хорошо разбирается только с небольшими логически выделенными элементами. Разделяй и властвуй. Древний и надёжный принцип.
                Ответить
                • > И да, про не работу паскаля\дельфы в таких условиях, знаю.

                  А в зависоне такого кода тоже Паскаль виноват, а?
                  for (i=0;i<5;i++) { i = i-1};

                  Я не знаю ни одного алгоритма, требующего менять управляющую переменную цикла, за исключением удаления элементов из массива детским методом.
                  Правда, говнокодеров это не останавливает (см http://govnokod.ru/5609), и они лепят while, но алгоритм всё равно остаётся неверным.
                  Ответить
                  • >Я не знаю ни одного алгоритма, требующего менять управляющую переменную цикла

                    ну например интерпретация байткода, где аргумент опкода может иметь variable size. хотя там можно и через while
                    Ответить
                    • Для интерпретации байткода фор не подходит, так как там нужно не "перебрать все числа из диапазона".
                      Ответить
                      • в оригинальной цитате стоит обобщённое "менять управляющую переменную цикла"
                        Ответить
                  • использование Goto оправдано крайне редко. например при поиске в 2D массиве 1 goto вместо 2-х брейков, например.
                    Что качается изменения управляющей переменной цикла - пример: сумма ширин колонок в Excel-подобной таблице, где часть столбцов сколлапсено.
                    Хуже всего что в дельфи нельзя брать значение управляющей переменной после цикла - это нужно чаще, при поиске например.
                    Ответить
                    • for(i = 0; i < n; i ++) if (...) break;
                      вполне прилично выглядит, в отличие от:
                      i := 0; while(i < n){
                      if (...) break;
                      i ++;
                      }
                      Ответить
                      • >for(i = 0; i < n; i ++) if (...) break;
                        Юзате алгоритм std::find_if, например, а то не прилично выглядит.
                        Ответить
                        • :) я для примера.
                          к тому же в delphi std нету
                          Ответить
                    • > Что качается изменения управляющей переменной цикла - пример: сумма ширин колонок в Excel-подобной таблице, где часть столбцов сколлапсено.

                      Если не свёрнута, то прибавить ширину ячейки.
                      Ответить
                      • ага, и пустой перебор, когда можно сразу пропустить кучу столбцов
                        Ответить
                        • А что, в ячейке хранится, сколько свёрнутых подряд находится после неё? Если нет, то один хрен полный перебор.
                          Ответить
                          • в столбце указано, сколько у него дочерних элементов, которые можно сколлапсить.
                            Ответить
                            • Да, что спорите. Есть такие случаи, когда нужно пропустить в цикле энное число элементов.
                              Ответить
                  • >А в зависоне такого кода тоже Паскаль виноват, а?
                    >for (i=0;i<5;i++) { i = i-1};
                    Ну очевидно же программист.

                    А в паскале for i=0 to 4 do i := i+6; зависает без каких либо оснований, ибо в С++ аналогичный for (i=0;i<5;i++) { i = i+6}; не зависнет.
                    Ответить
                    • > А в паскале for i=0 to 4 do i := i+6; зависает без каких либо оснований

                      В Дельфи не компилируется, а в Турбо...
                      Ну ты же не думал, что у меня установлен Турбопас, да? Думал, что я поверю тебе на слово, да? Так вот, пиздёж это, в турбопасе это нифига не зависает.
                      Ответить
                      • >В Дельфи не компилируется
                        Я знаю, что спустя много лет они исправили этот баг костылём. Похвально.
                        Ответить
                        • Какой баг? Нету никакого бага. Я проверил, понимаешь? А ты то ли сам придумал, то ли чужой крестоблядский пиздёж перетранслировал.
                          Ответить
                  • >за исключением удаления элементов из массива детским методом
                    Или из списка не детским методом, где это совершенно нормально, когда переменная цикла - итератор.
                    Ответить
                    • В списке фор не катит.
                      Ответить
                      • Итераторов С++ вы не знаете.
                        Ответить
                        • Знаю. Паскалевский фор там не катит. Хотя да, Паскалю не хватает поддержки фора для итераторов.
                          Ответить
                          • Любите применять метод минусования постов оппонента? Не круто.

                            зы: Я минус не трогал, но если сильно попросите - нажму.
                            Ответить
                            • Ничё, что минусы и у меня тоже?
                              Ответить
                              • >Ничё, что минусы и у меня тоже?
                                Ну значит не убедительные аргументы.
                                Я не минусовал. Доказываю это постом выше (http://govnokod.ru/7216#comment96232), раз так просите вас хоть где-нибудь минуснуть. Если и после этого не поверите, то меня это не волнует.
                                Ответить
                                • > Ну значит не убедительные аргументы.

                                  У тебя совсем думалка отвалилась от баттхёрта из-за минусов, алё? То, что минусы и у меня, говорит о том, что тут кто-то третий ходит и всех минусует.
                                  И я могу "доказать", что это не я, сделав тебе не -2, а хоть -10, но это ничего не докажет.
                                  Ответить
                                  • > сделав тебе не -2, а хоть -10
                                    ах ты конь жеж
                                    Ответить
                                    • Как ты узнал, что я конь?
                                      Ответить
                                      • >Как ты узнал, что я конь?
                                        Могу предположить, что ты заржал.
                                        Ответить
                                      • > Как ты узнал, что я конь?
                                        сходил буквой Г?
                                        Ответить
                                  • >но это ничего не докажет.
                                    это докажет наличие виртуалов. правда, это и так уже известно :)
                                    Ответить
                          • паскалю вообще не хватает нормального фора, столько лет работаю и до сих пор меня плющит от этого:(
                            Ответить
                            • Аналог сишного фора - это вайл. Разница только в том, что условия по другому переставлены.
                              А паскалевский - это более высокоуровневая, но и менее универсальная конструкция.
                              Ответить
                              • Недостаточно высокоуровневая и недостаточно универсальная.
                                Ответить
                                • Фор - удобная вещь, особенно с итераторами из ФПЦ.
                                  Универсальнее всего, как сказал не я, ГОТО.
                                  Ответить
                              • в принципе, да. только вот изменение переменной удобно указывать в операторе цикла. да и инициализацию тоже... сишный фор получился однака:)
                                Ответить
                              • высокоуровневый фор в SQL: for select....
                                в javascript for (var i in arr){}
                                Ответить
                      • >В списке фор не катит.
                        Я говорил про списки из STL c применением итераторов.

                        Что-бы вам было понятнее, то вот пример использования for для простейшего интрузивного списка - велосипеда (вы же любите велосипеды):
                        В данном случае for используется для перечисления всех элементов списка:
                        struct TList //Не забыл префикс T перед именем типа, дельфисты его обожают. Смазка для более лёгкого вхождения в мозг.
                        {
                          void* data; //Указатель без типа, чтобы не смущать ваш мозг шаблонами и строгой типизацией ПХПисты строгой типизации пугаются, как и Вы.
                          TList* nextItem;
                        };
                        //...
                        TList list;
                        //Перечисляем все элементы списка list:
                        for(TListItem* item = &list; item!=NULL; item = item->nextItem)
                        {
                          //Проводим операцию на элементом спсика item->data
                        };


                        for в списке не катит?
                        Ответить
                        • И что из этого я не знаю, кэп?
                          Так вот, тут фор и не фор на самом деле, а вайл. Хотя дополнить идею перечисления и для списков в Паскале надо бы.
                          Ответить
                          • >тут фор и не фор на самом деле, а вайл
                            Запишите вайлом и чтобы это было красиво.
                            Ответить
                            • for (a,b,c) {
                              d
                              }

                              =

                              a;while(b){
                              d;
                              c};
                              Ответить
                              • Сексапильнее всего через do:
                                (do ((cycle-var0 a c)) ((not d) result-form))

                                Уважайте своих родителей, дети!
                                Ответить
                              • >Запишите вайлом и чтобы это было красиво.
                                >a;while(b){
                                d;
                                c};

                                Не красиво. Выглядит как макароны
                                Ответить
                                • В таком случае любой цикл можно записать сишным фором с пустым телом:
                                  for(a;b;c,d);

                                  Совсем красиво получилось, прямо как вызов функции.
                                  Ответить
                          • В FreePascal есть:
                            for s in StringList do ...
                            for Obj in List do...
                            for MyClass in (specialize TFPGList<TMyClass>)do...
                            for aChar in 'abcdef' do...
                            for i in [1,2,3,5..10] do... (хотя тут косяк, здесь не массив а множество, так что только до 255)
                            ... а насчет списков - надо посмотреть, можно ли там этот интерфейс самому использовать.
                            Ответить
                            • Ну да, реализуем MoveNext и Current и можем for..in юзать. Даже интерфейсы, в отличие от Дельфи, не нужны.
                              http://freepascal.org/docs-html/ref/refsu50.html#x121-13100010.2.5
                              Ответить
                          • Что-то с Тарасом случилось, умные мысли о C++ стал говорить. А его всё минусуют по привычке.
                            Ответить
          • показать все, что скрытоfor(int i = 0; i < n; ++i);
            вот, меняю переменную. я нарушаю логику цикла?
            Ответить
        • http://ithappens.ru/story/6970
          КРЕСТОПРОБЛЕМЫ
          Ответить
      • В нормальных языках управляющие переменные вообще не видны.
        Ответить
        • это как?
          Ответить
          • Видишь суслика?
            Ответить
            • for(i : [0..9]) {
              print i;
              }
              где здесь суслик?
              Ответить
              • >[0..9]
                > i - это далекооо отбежал
                Ответить
              • void myfunction(int i) { std::cout << " " << i; }
                std::vector<int> myvector;
                std::for_each(myvector.begin(), myvector.end(), myfunction);


                Где здесь суслик?
                Ответить
                • >Где здесь суслик?
                  Он спрятался в кустах STL.
                  Ответить
                  • > void myfunction(int i)

                    а вот и кусты. без суслика здесь никак
                    Ответить
                    • Это не управляющая переменная. Итерация не зависит от её значения.
                      Ответить
                      • Что значит не зависит? Она используется в функции, но модифицировать ее нельзя. В таком случае в паскалевском for тоже нет управляющей переменной - она тоже передается, но ее нельзя модифицировать.
                        Ответить
                        • Если хочется модифицировать, можно получать по ссылке.
                          Ответить
                          • А кто будет модифицировать, тот получит по наглой рыжей ссылке!
                            Ответить
                        • Итерирование по коллекции, содержащей 1, 2, 3, 5, 2, 8, 2. i=2. В каком месте мы сейчас находимся? Какое значение следующее? Сколько элементов осталось?
                          Ответить
                      • для этого есть к.с. const или final
                        Ответить
                • std::vector<int> myvector;
                  std::for_each(myvector.begin(), myvector.end(), [](int item) {cout <<  i << endl;} );




                  Где здесь суслик?
                  Ответить
                  • std::vector<int> myvector;
                    for(int i : myvector)
                    std::cout << i;

                    Где здесь суслик?
                    Ответить
                    • Нет такого языка. Если это был С++, то такого в нём тоже нет.
                      Ответить
                      • Ожидается в следующем стандарте. (который c++0x)
                        Ответить
                        • уже его приняли. нет там такого
                          Ответить
                        • >Ожидается в следующем стандарте.
                          Слышал новости, что эту конструкцию в связи с длинным наследием легаси С++ пока добавлять не будут.
                          Ответить
                          • Трёх или более человек ещё не проинформировал комитет стандартизации? Медленно работает комитет.
                            Ответить
                    • Если у вас myvector содержит 2 элемента {100, 500}, то на экране вывелось бы 100500 при использовании вашего метода. К тому же С++ не выводит на экран, если не сбросить закэшированные символы, например коммандой << endl;
                      Ответить
          • xA
            Ответить
    • В коментах срачь конечно...
      Ответить
    • vanished
      Ответить

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