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

    +26

    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
    input >> heap;
    	while( heap[0] == '0' ) heap.erase( 0, 1 );
    
    	heaps.push_back( heap );
    
    	input >> heap;
    	while( heap[0] == '0' ) heap.erase( 0, 1 );
    
    	heaps.push_back( heap );
    
    	input >> heap;
    	while( heap[0] == '0' ) heap.erase( 0, 1 );
    
    	heaps.push_back( heap );

    Запостил: Fai, 05 Июля 2012

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

    • Сори за отступ.
      Ответить
    • // Повторенье - мать ученья.
      // Функции для ленивых.
      // Повторенье - мать ученья.
      // Функции для ленивых.
      // Повторенье - мать ученья.
      // Функции для ленивых.
      Ответить
      • Мантра любого быдлокодера!
        Ответить
        • Правильный индус, произнося эту мантру, должен не копипастить код, а набирать его с клавиатуры...
          Ответить
      • куда ты функцию воткнёшь?
        кресты не могут функцию в любом месте кода
        я тоже вынужден копипастить
        потому что впадлу листать вверх и в глобальном пространстве заводить говнофункцию
        Ответить
        • > куда ты функцию воткнёшь?
          - Тупо размещу в текущем модуле, и заключу в анонимный неймспейс (с++) или помечу как статик (с), если это чистая, и никому более не нужная функция.
          - Вынесу в приват в текущем классе, если ей надо иметь доступ ко многим членам класса.
          - Запилю отдельный класс\модуль, если она окажется достаточно обобщенной, и сможет пригодиться мне или кому-то еще во многих других ситуациях.

          > я тоже вынужден копипастить
          Не хочешь функцию - задача из топика отлично решается циклом от 0 до 2.

          > потому что впадлу листать вверх
          Есть такие интересные программки, IDE называются. Хватит уже насиловать труп ноутпада.
          Ответить
          • Это батл?
            - (1) Твои функции настолько тупые что их некуда засунуть!
            - (2) Твоя IDE настолько тупая, что не поддерживает навигацию!
            - (1) Твоя говнофункция настолько тупая, что мне впадлу её заводить!
            - (2) Твое программирование настолько тупое, что ты вручную развертываешь циклы!

            2:2 - ничья.
            Ответить
          • Тому, кто не работал с удобными локальными функциями в нормальных языках, не понять ограниченности С++.
            Ответить
            • Работал. В хаскеле. Действительно удобно. А та жалкая пародия на замыкания из нормальных языков, которая в паскале зовется локальной функцией - не особо и нужна.
              Ответить
              • Даже паскальные локальные функции намного удобнее, чем хренатень с локальными классами в С++.
                Ответить
                • Можно пример кода, в котором локальная функция действительно необходима?
                  Ответить
                  • ms vc 6.0, std::for_each
                    Ответить
                  • Да даже тот, который сейчас. Одно и то же действие с чуть разными параметрами.
                    Ответить
            • >Тому, кто не работал с удобными локальными функциями в нормальных языках, не понять ограниченности С++.
              Local functions not suitable for test driven development. You can't test it.
              Ответить
        • Можно макрос, его где хочешь объявляй.
          Ответить
          • Совет про макрос идеально вписывается в тематику этого сайта.
            Ответить
          • А после использования его можно андефнуть:
            #define A \
                input >> heap; \
                while( heap[0] == '0' ) heap.erase( 0, 1 ); \
                heaps.push_back( heap );
            A
            A
            A
            #undef A
            Ответить
        • могут, лямбды рулят:)
          Ответить
    • А это точно говнокод? Ну запись цикла одной строкой это не так уж и страшно, а вообще очень похоже на неудачный мерж от СКВ.
      Ответить
      • Кажется, что как минимум можно было собрать функцию, которая получает input, heap и heaps (а может быть ещё какие параметры), и упрятать в неё код:
        input >> heap;
        while( heap[0] == '0' ) heap.erase( 0, 1 );
        heaps.push_back( heap );


        А затем вызвать функцию из цикла.

        Ваш Int/
        Ответить
        • пф
          а сделать сначала find_first_not_of или аналог, чтобы найти позицию первого не нуля, и лишь затем сделать erase, не?
          туда же - boost::algorithm::trim_left_if/trim_left_copy_if
          Ответить
          • Плевать как реализовывать, int прав - нужно выделить эти операции в функцию с хорошим названием.
            Ответить
        • Какой цикл? Я говорю что дублирования кода иногда появляются от того что системы контроля версий при обновлении ревизии не всегда правильно совмещают старый и новый код.
          Ответить
          • Причина не в этом. Просто код плохой.
            Ответить
          • > не всегда правильно совмещают старый и новый код
            Зачем вы пользуетесь такими системами... Ни в git ни svn таких проблем никогда не встречал. Да, бывают мердж конфликты, но они к топику отношения не имеют, и о них система контроля сообщает в явном виде.
            Ответить
            • Встречал в СВН. В pom проекты все время добавлялся узел после мерджей - это был узел с настройкой surefire reports который нужно было всегда руками отключать на локальных машинах а у Дженкинса наоборот, включать обратно. Сначала все друг на друга грешили, что забываем, но потом провели эксперимент в присутствии независимых наблюдателей. После очередного коммита СВН таки произвольно добавил еще один узел вызывавший тесты после точно такого же, но закомментированного.

              Но, если честно, то у Гита мерджи вообще хреновые - пометить весь файл как изменившийся после изменения в одной-двух строках - такого сколько угодно случалось.
              Ответить
              • Коммитили чем?
                $ svn commit -m "Message"
                ? Или всё же из IDE?
                Ответить
                • Кто чем, большинство работало с Идеей - наверное и коммиты делали через нее, а может и из графической оболочки типа контекстного меню. Я коммитил из p-svn (эмакс мод для работы с СВН), но иногда и просто из коммандной строки - что быстрее было. Там и эклипсом кто-то пользовался и студией. Проект большой...
                  Ответить
                  • IDE добавляла ваши узлы, инфа 100%
                    SVN-у вообще фиолетово, что там в ваших файлах лежит.
                    Ответить
                    • Я не знаю, если честно, мне все равно как именно это получилось. Мне очень сомнительно, что система контроля версий не имеет отношения к файлам, но я готов это списать на экзотические опеределения понятия файл, или возможно под SVN понималась страна в восточой Европе...
                      Ответить
              • > нужно было всегда руками отключать на локальных машинах а у Дженкинса наоборот, включать

                А профили мавеновские религия не позволила использовать?
                Ответить
                • Бессмысленно, закомментировать один тег быстрее, чем выбрать другой профайл. Тем более на каждую комбинацию из включить/отключить профайлов не наберешься.
                  Ответить
                  • Ой, да прям, один раз запихал дополнительный конфиг surface в профиль jenkins и на сервере с дженкинсом в ~/.m2/settings.xml дописал <activeProfile>jenkins</activeProfile>
                    Пять минут делов против часов недоразумений и кривых коммитов, ломающих билд.
                    Ответить
                  • Лучше лучше чем быстрее.
                    Ответить
                    • Ну это ж сиюминутная работа. Сегодня кто-то добавил тесты, завтра его уволили, и его тесты выбросили, послезавтра пришла очень старательная девочка, которая написала 50 тестов транзакций трансформирующих миллионы фитюлек в одной базе в фитюльки в другой базе. Потом девочку тоже увлоли, но тесты не убрали и т.д. Если на каждый чих заводить по профайлу, то пом, надо сказать мало того, что уродская по своей гнилой сути и задумке система, так еще и написана финским гегзаметром: что ни действие += 100 строчек херни какой-нибудь добавить нужно.
                      В таком свете профайлы - это лишний мусор, где вместо того, чтобы следить за одним билдом, прийдется следить еще и за кучей профайлов (а что если супер-старательная девочка ошиблась профайлом и записала свои тесты не туда? а что если мудак, которого уволили собирал проект всегда со своим профайлом и менял конфигурацию сервера на свою, когда что-то не собиралось? и т.д.)
                      С мейвеном количество очень быстро переходит в плохое качество, т.как ну очень его много, а тестируемость самого мейвена нулевая.

                      В данном случае, высказываю не свое мнение, а отредактированный для пристойности пересказ со слов замечательной девушки заведовавшей в нашем отделении авотматическими сборками. Мне это все было высказано в ответ на попытку добавить профайл после мук вызванных бат скриптами написанными уволенным уродом и навечно застрявших где-то в билде.
                      Ответить
            • Поддерживаю: ни git, ни bazaar, ни merurial никогда меня так не подводили.
              SVN-ом не пользуюсь, может там действительно такие баги.
              Ведь бренчить и мержить там вроде как геморно.
              Ответить
              • Обычно VCS подводят тех, кто неосилил их как следует изучить.
                Ответить
                • Согласен, с другой стороны знатоком git себя не считаю, хотя единственная проблема которая возникла - попытка слить очень разные ветки.
                  Сначала многое решал вручную, потом просто перестал доводить ветви до такого состояния.
                  Но неудобств теперь никаких нет, полностью доволен. Жалею только, что не познакомился с git раньше.
                  Ответить

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