Кресты / Говнокод #3767 Ссылка на оригинал

0

  1. 1
  2. 2
width ? width-- : width;
height ? height-- : height;

Ахуй нехуевый. Не говнокод, наверно, но всё же.

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

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

    • ага, а я б написал if( width>0) width--;
      правда тернарный оператор скомпилится в cmov, а с ифом может возникнуть условный переход, и насчет скорости хз
      но ИМХО наглядность важнее.
      Ответить
      • А если width объявлено как unsigned, то >0 в if'е не обязательно.
        Хотя, опять же, если воспринимаем как число для наглядности лучше писать >0.
        А если width уже было отрицательно, то в исходном варианте уйдем в глубокий минус.
        Ещё хотелось бы отметить, что обычно результат тернарной операции чему-то присваивается. Если например :
        a = width ? width-- : width;
        , то с учетом постдекремента развернётся в
        a = width;
        if( width ) width--;
        . Более весело получается, когда
        width = width ? width-- : width;
        . Такой код можно вообще убрать. Если конечно декремент не имеет побочных эффектов.
        Ответить
        • >>> то с учетом постдекремента развернётся в
          >>>a = width;
          >>>if( width ) width--;
          немного неверно там вместо a - временная переменная

          в общем современные компилеры достаточно умны чтоб не сейвить во временные переменные и могут вставить cmov если это целесообразно.

          А вообще надо писать наглядно, и расчитывать на компилер в критичных по скорости местах - BIG MISTAKE - на своем опыте знаю - лучше написать на асме.

          >>>А если width уже было отрицательно, то в исходном варианте уйдем в глубокий минус.
          ИМХО в большинстве случаев объявить width как signed уже говнокод....
          Ответить
          • > немного неверно там вместо a - временная переменная
            Не совсем понял, что неверно.
            Ответить
            • ну кагбе постдекремент создает временную переменную и вполне реально примерно такое
              a=tmp=width;
              if( tmp) width--;

              короче tmp - ячейка отличная от width
              вообще эти инкременты весьма мутная тема и все зависит от компилера особенно в С/С++
              мы с инканусом уже обсуждали это здесь...

              не помню номер но сам говнокод в котором мы это было выглядел как-то так
              a=a++;
              почитав тот тред можно увидеть, как от этих временных переменных сильно меняется результат.
              к примеру MSVC - вообще их не использует и тулит все в одну ячейку.
              Ответить
          • Ну смотри, есть об'ект, у него есть минимальная ширина и максимальная. Как обозначить, что максимальная ширина не ограничена? Первая мысль -- (-1). Довольно логично. Вторая -- завести спец bool, и от этой мысли хочется bool'евать кровью. Предложи еще?
            Ответить
            • Вероятно, не стоит путать width (текущая ширина) и maxWidth (предельная ширина).
              Ответить
              • Пример:
                struct Size
                {
                int width;
                int height;
                };
                Size maxSize;

                Контекст -- он нас всегда всех обламывает.
                Ответить
                • А что если использовать MAX_INT или вроде того?
                  Тогда не нужно дополнительных проверок, типа:
                  if( maxSize.width == -1 ) без ограничений;
                  Ответить
                  • Я по каким-то причинам отмел эту идею, но причин не помню)) Твоя правда, это выход.
                    Ответить
        • Аппрувлю: це никуда не присваивается, что в первую очередь меня сбило с толку. В минус по логике уходить не должно, но сделано всё так что если будет понижаться -5 до -6, то будет работать как задумано.

          Оффтоп: вообще, я такую эволюцию прослеживаю
          C -> Objective-C -> C++ -> Workaround-C++.
          А вас, дорогие друзя, это не бесит?
          Ответить
      • IMHO, что важнее, каждый программист выбирает для своего проекта сам. А в остальном полностью согласен, мне лично тоже привычнее смотреть на "if(width) width--;"
        Ответить
        • Ага. И для еще кучки других программистов он же решает? Или каждый себе сам в своей строке кода?
          Ответить
          • Я извиняюсь, если я нечётко сформулировал, но по-моему, при желании, понять что я хотел сказать достаточно несложно.

            Я хотел сказать, что по задумке проекта приоритеты могут быть расставлены как как только захотят соотвествующие люди в данном проекте.
            Ответить
      • >правда тернарный оператор скомпилится в cmov
        >насчет скорости хз
        Годик назад проверял. На современных процах cmov медленее, чем условные переходы. cmov плохо спаривается.
        Ответить
      • >ага, а я б написал if( width>0) width--;
        А Я: if( width>0) --width; Быстрее, хотя экономия на спичках.
        Ответить
        • >>>На современных процах cmov медленее
          >>>А Я: if( width>0) --width; Быстрее, хотя экономия на спичках.
          согласен
          Ответить
          • но иногда cmov бывает быстрее, потому я и написал
            "насчет скорости хз"
            Ответить
            • >но иногда cmov бывает быстрее
              На да. На старых компах. Но смысла ориентироваться на такие компы я не вижу. Им уже лет 10-15.
              Ответить
              • не только. да до P4 его использование предпочтительно
                но и на новых Core 2,i7, AMD - есть ситуации, где cmov - быстрее.
                все зависит от вероятностей усл. джампа
                Ответить
                • Согласен. Тестировал, когда ветка под ифом выполнялась достаточно редко Примерно в 1/64 случаев.
                  Видимо предсказание ветвлений у меня хорошо срабатывало по такому случаю.
                  А вот cmov и прочие варианты, например через арифметику выполнялись дольше, да и ипользование ассемблерных ставок вставляло палки в колёса оптимизатора.
                  Ответить
          • >читается хуже
            Ну только теми людьми, у которых в языках объект, над которым выполняют действие стоит на первом месте, а действие на втором. Вы к таким не относитесь, как рускоговорящий.
            Например, Вы же не говорите "Слоников посчитать", а говорите "Посчитать слоников".
            Ответить
            • Да не обращайте внимания, я же не серьезно. Каша в башке весь день, юморяю плохо.
              Ответить
  • бред какой-то, не вижу никаких разумных применений
    а может это вложено в цикл или рекурсию и таким образом обнуляются width и height ? ))
    Ответить
    • Как верно подметил absolut, это зашифрованное
      if (some) some--;
      And it's awesome))
      Ни цикла, ни рекурсии -- просто -1, и все.
      PS: И придумал это не я, что не может не радовать)
      Ответить
    • > ...и таким образом обнуляются width
      Тоже первая мысль была об этом. Обрамить всё в цикл и получить истинный ГК 🙂
      Ответить
    • специально переделывал когда-то свои лабы по С++ в нечитабельный вид, если какой-то неуд просил лабу "посмотреть для примера":

      int i=-1;
      while (i+=(5==3=>7?3:5),i<a) { ... }

      есстесн неуд не поймёт что там написано, и будет сдавать лабу как есть (без переделывания), ну а преп его заставит объяснить что к чему и написать в нормальной форме;

      и неуд ищет кто ему сможет объяснить код, но таких не находится, и тогда ему приходится грызть учебник или заказывает нормальную лабу =Ъ
      Ответить
      • а я наоборот помогал, причем бесплатно... и заработал на этом много опыта и пива... многие из них уже не станут программистами...
        а вот вы сами растите себе конкурентов...
        Ответить
        • тут ситуация немного иная;
          я разделяю понятия "Помощь" и "Работа":
          - если кто-то просит дать ему совет или объяснить как это делается (в общих чертах) - это Помощь
          - а если кто-то просит готовый код, который будет использован для личной выгоды, - то это уже Работа

          Помощь - естессно бесплатно, и в любое время (если есть оное)
          а Работа - должна оплачиваться (иначе смысл оного пропадает)
          ---------------------------
          неуды, про которых говорилось выше, - просят выполнить работу, под видом помощи;
          притом не за работу, не за помощь оные даже спасибо не скажут, не то чтобы пивом угостить -(
          поэтому приходится идти на такие извращения..

          (одной девушке такие неуды вылезли на шею и используют, притом с упрёками типа: "если ты мне не поможешь, меня из-за тебя лишат стипендии".
          а та девчёнка помогает им: абсолютно бесплатно делает лабы и объясняет как защитить;
          смотря на это - аж противно становится)

          зы: да и с их складом ума, программистами им Никогда не быть, так что конкурентов тут не будет.
          (хотя они, сцука, при абсолютном отсутствии знаний получают повышенную стипендию)
          Ответить
          • получается что обфускацию кода которую ты предварительно делаешь ты за работу не считаешь, хотя и тратишь свое время...
            Ответить
            • добавить несколько трудно читабельных строк в код, это не соизмеримо с полностью продуманным с нуля алгоритмом и кабе творческим подходом к решению задачи.

              к тому же это только для самых хитрых;
              - остальные же заказывали работу по-нормальному;
              Ответить
            • Он делает это из вредности и любви к искусству 😀

              SRSLY, не проще ли не давать код?
              Ответить
          • >>>хотя они, сцука, при абсолютном отсутствии знаний получают повышенную стипендию

            большинство обычные флюродросы и любители поупрашивать препода
            Ответить
            • А как насчет "ну и пусть дрочат на свою стипендию, а я потом заработаю больше"?
              Ответить
              • помню, я за первые 3 месяца заработал больше за год повышенной
                и нервы - целые *happy*
                Ответить
        • +1. Внатуре. Сам таким на первом курсе был, полный нулл, и даже немного на втором. Куда деваться? Просил тоже, но люди отзывчивые попались. Хотя (i+=(5==3=>7?3:5),i<a) я понимал нормально, я мьютексы не понимал.
          И вообще. Диплом имхо нужен чтобы хот куда-то взяли. Красный -- чтоб точно при желании взяли по специальности (ибо так просто вроде не получить). А по специальности в группе ХОТЬ ЧТО-ТО понимают... эмм... ну, скажем, 17,5% (с калькулятором посчитал)) ). А я ваще довольно туповат, а в менеджеры/управленцы и т.п. не пойду. Душа блядь не лежит. Так че мне теперь, семью никогда не кормить? Половина же выйдет и станет чуть менее, чем средними специалистами с чуть более чем нормальным уровнем жизни. Из-за гордыни лишать людей жизни по-моему не хорошо.
          Даже для себя не буду разбираться, что из этого образно, а что про меня. Блять заткните меня я дохуя пизжу весь день жара ебаная достала
          Ответить
          • я поособому отношусь к людям с красным дипломом... так как вероятность что в их головах не окажется знаний довольно немалая (яб даже сказал огромна, а сразу выяснить это не получится, так как диплом красный)...
            знаю кучу примеров...
            Ответить
            • Хм. Ну просто я такого пока не встречал. эх.
              А что тогда показатель после выхода из инста? Вообще все теряется тогда... Я знаю зато нескольких людей, которые после девятого класса не учились вообще, но знают больше чем знают 99,(9)% всех человеков с в.о и п.к. (полными карманами), и работают они в таких местах где я вряд ли вообще побываю когда-либо.
              А универ закончить надо, в этом меня, к сожалению, не переубедишь.
              Короче, дайте мне мотиватор плиз.
              Ответить
              • нужны знания... причем не "просто слышал", а "знаю и использую"... ну и немного уверенности в себе, это нужно на собеседованиях, хотя новичкам это обычно мешает...
                Ответить
                • Я про институт конкретно, а не про работу/способность/качество работы. Я понимаю, что работа довольно редко связана с инстом, причем очень хорошо понимаю сейчас. Зачем мы тогда идем в вузі?
                  Ответить
                    • Институты разные бывают, это во1. И, скорее всего я тебя немного огорчу, но многие из них довольно плохи. Первое, что приходит в голову, это пример: на Первом курсе мы пишем консольный im-клиент типа p2p, с поддержкой бесконечного количества клиентов, представляющих из себя клиентов и серверов одновременно, а на Третьем курсе другой человек пропихивает лабвью и логомиры.
                      Во2 тому, чему учат в институте учиться не обязательно, к моему сожалению и даже скорби.
                      Ответить
                    • 2Altravert:
                      если вы на 1м курсе изучали и писали p2p, - у вас двольно классный универ, я бы в таком хотел бы учиться;

                      за 3 года, у нас самым интересным заданием было: Написать программу рисования лабиринта с функцией поиска выхода -- банальная рекурсивная функция перебора ходов;
                      ---------------------------------------------
                      стимул: получить корочку в.о.
                      но это стимул просто закончить обучение в ВУЗе, и не уйти из него досрочно...

                      как говорил мой преп по вышке: "в вузе учить учиться! ну, по крайней мере, так должно быть..."
                      -- и правда, в вузе должны давать вектор обучения;

                      мне понравился стиль обучения одного препа:
                      "Вот задача (условие), срок: 2 дня"
                      далее идёт пара вводных слов про то для чего эта задача нужна и с какими проблемами можно столкнуться, но ни слова про способы решения этих проблем (максимум намёк какой-то)

                      и тут у тебя есть 3 пути:
                      - найти готовое решение (скучно)

                      - почитать литературу и написать решение за 1 час (сильно просто)

                      - попытаться самому чот придумать, опираясь на базовые знания языка (без какой-либо литературы)
                      ты тратишь пару часов на написание программы, в ходе тестирования натыкаешься на жука...
                      еще пару часов пытаешься его пофиксить: в итоге самостоятельно фиксишь этот баг
                      смотришь на код -- и тебе он кажется не красивым и ГК каким-то: тратишь еще пару часов на облагораживание...

                      и вот чудо: оно работает, и ты затратив 6 часов - решил задачу...

                      потом так, чисто для интереса открываешь книгу, и находишь там 3 функции из стандартной библиотеки, на написание и отладку которых у тебя ушло 6 часов...

                      и ты не понимаешь - смеяться или плакать... (вот оно! - этот путь по мне, ибо я сильно ленивый, чтобы открывать книжку)
                      ----------------------------------------------

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


                      ззы: стимул -- так же нужно определить самостоятельно 😉
                      Ответить
                      • Ну, подчеркиваю, мы все таки писали IM. Также хочется застрить внимание что писал 1 человек. 1,5 если быть точнее. Мы не знали ни языков, ни алгоритмов, ни принципов: поставили задачу, а затем месяцы мозгоебства, пересдач чужого кода и всё такое. Мне повезло что я сравнительно быстро со всем этим разобрался. Притом препод явно преследовал личные цели: ему нужны были оригинальные исходники базового im клиента, о чем он проболтался. С тех пор кодить начали 2 человека из группы, один из них я. Мне говорят что теперь типа я больше всех в группе разбираюсь. Не знаю, сомневаюсь в этом, но то что кодером работаю я один -- это факт. Повторюсь, по специальности ("каким-то образом отноститься к компам" -- такая бля у нас специальность) чем-то заниматься могут несколько человек.
                        Насколько это хорошее образование?
                        И все таки только корочка выходит важна? Как доказательство усидчивости/везения/денег/задротства/зубрежки/жополизства (у кого что).
                        Ответить
                        • корочка нужна для понта, притом не тебе, а будущему начальнику.
                          чтобы он мог сказать: "наша команда состоит из первоклассных спецов, все они имеют в.о."

                          т.е. если ты талантлив и ты что-то умеешь делать хорошо -- тебя возьмут на работу.
                          но всёравно будут напрягать, чтобы получил В.О., - ибо: "у нас солидная контора, и нужно чтобы весь персонал (включая уборщицу) был с в.о."
                          Ответить
                          • Да, всё так получается. Видимо я правильно думаю.
                            Вата. Бесперспективненько.
                            Ответить
                          • в последний раз видел свой диплом, когда оформлялся на работу официально, при этом я проработал больше года и доработал до должности лида... с тех пор прошло 2,5 года... текущее руководство мой диплом не видело...
                            на собеседовании оконченное высшее является бонусом, так как оно свидетельствует о том, что человек может заставить делать себя то, что не хочет, а как известно даже в довольно интересном геймдеве есть очень много скучных задач... люди без ВО могут просто забить на все, как они это сделали в получая это самое ВО...
                            Красный диплом бонусом не является...
                            знаю кучу примеров...
                            Ответить
          • Точняк!
            Хорош гнать, надо искать нормальную работу, с кондиционером.
            У нас среди сотрудников такие настроения: «Блин, дома так гнусно, пойду на работу, там прохладно хоть»:)
            Ответить
            • Полгода во временном офисе((
              Седня гендир в 14:00: "Жарко седня, мы пошли, а вы на 2-3 часа пораньше домой идите". Через полчаса коммерческий "Всем на пляж! Это приказ! Всем пока!"
              Жара задрала
              Ответить
              • Да, тут народ даже от жары санпин повспоминал:) Там (по слухам) прогрессивно в зависимости от температуры предусматривается сокращение рабочего дня вплоть до нуля! Правда, одна закавыка, начальство должно это все официально и документально оформить.

                PS. В Барселоне 30, поеду, нафик, туда!:)
                Ответить
              • >Седня гендир в 14:00

                гендир это социальный конструкт
                Ответить

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

Помни, guest, за тобой могут следить!

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


    8