1. 1C / Говнокод #1723

    −117.8

    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
    Если Приказ.Выбран() = 1 Тогда
    			Если Приказ.Вид() = "Приказ" Тогда
    				// это все-таки приказ
    				Если Приказ.ТипПриказа <> Перечисление.ТипыПриказов.НаВнутреннееСовмещение Тогда
    					// но приказ другой, не внутреннее совмещение
    					Продолжить;
    				КонецЕсли;
    			Иначе
    				Продолжить;
    			КонецЕсли;
    		Иначе
    			Продолжить;
    		КонецЕсли;

    Долой минимализм!

    Наговнокодили: Ингресс-лайн

    Запостил: Полупрограммисты, 29 Августа 2009

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

    • Вах, раздел под 1С... сюда можно постить любой кусок кода незадумываясь, говнокод оно или нет (ответ очевиден)
      Ответить
    • Nagg, опередил)
      Ответить
    • А что здесь не так?
      Ответить
      • Я не знаю язык в 1С, но мне кажется, вместо кучки Если и тройного "продолжить", можно было бы использовать логическую конструкцию, что-то вроде:
        Если Приказ.Выбран() = 1 И Приказ.Вид() = "Приказ" И Приказ.ТипПриказа = Перечисление.ТипыПриказов.НаВнутреннееСо вмещение Тогда
        Иначе
        Продолжить
        КонецЕсли;
        Ответить
        • Строка Приказ.Выбран() означает проверку того что объект типа документ или справочник спозиционирован и существует. Если мы ее исключим, существует вероятность схвотить эксепшен, так как объект не спозиционирован.
          Далее после определения вида документа или справочника «Приказ» - из кода этого не понятно, идет обращение непосредсвенно к реквизиту объетка. Если мы определение вида исключим, тогда есть вариант, что у этого объекта нет такого реквизита, и мы опять сможем схватить эксепшен.
          Привидений код может и не является красивым, но он ГАРАНТИРОВАНО отработает то, что ему полагается.
          Ответить
          • Максимум, что можно свернуть, это два первых условия, и то надо смотреть по контексту.
            Ответить
          • Если при создании конфигурации ты определяешь тип своего реквизита, как "Документ.Приказ" - то проверять приказ ли это - это паранойя.
            Ответить
            • Ну в коде то не видно, какой тип у этого реквизита
              Ответить
          • Разве 1С не умеет анализировать логические конструкции?
            По идее, если Приказ.Выбран() = 1 не будет истинным, то остальные условия и не должны выполняться в любом более-менее вменяемом современном языке, и эксепшиона не будет.
            Конечно, если 1С принудительно выполняет все элементы логической конструкции, тогда согласен.
            Ответить
            • Это код для 1с 7.7 - она не оптимизирует вычисление булевых выражений. В 8.х такого уже нет.
              Ответить
              • Ух ты, не знал, что в 8.x уже все лучше.
                Ответить
              • Обоже мой


                То есть если сказать "if FOO and BAR" то проверятся оба условия, даже если FOO ложно?

                Ужасно. Хорошо, что 7.7 уже семнадцать лет как неактуальна
                Ответить
                • Когда восьмая версия только появилась, её закидывали какашками.
                  Ответить
                  • Потому что тупила наверное, ну и сам факт разворота SQL сервера всех смущал

                    Сейчас там 8.3, кажется. Они движутся в сторону нормального приложения с веб-интерфейсным клиентом, брокером (который распределяет работу на воркеров), поддержкой постгрес и линукс и пр
                    Ответить
                    • > в сторону нормального приложения
                      > с веб-интерфейсным клиентом
                      – странно это слышать от тебя
                      Ответить
                      • Мы живем в мире постправды, и я сам не знаю, что я думаю. Я слышал много нахрюков на 1С-овые десктопные клиенты как то:
                        * Реализовать доступ пяти тыщ питухов проще на веб-сайт, чем на RDP ферму с клиентами (сильно проще)
                        * Десктопный клиент всегда тормозит
                        * Используется конечно какой-то пизданутый порт, который поди еще открой везде
                        * Для дебага там чуть ли не сервер подключается к клиенту, так что через NAT вообще плохо
                        Ответить
            • Возможно, я тебя шокирую, но во многих языках порядок проверки предикатов неопределён. Это значит - любой.
              Такая конструкция вырабатывает правильное понимание работы алгоритма, учит писать неговнокод.
              Единственная моя претензия - условия бы всё же вывернуть, чтобы "Продолжить" было 1 раз.
              Ответить
              • >Возможно, я тебя шокирую, но во многих языках порядок проверки предикатов неопределён.

                Расскажи пожалуйста подробнее
                Ответить
      • Во-первых сравнение со строковым литералом как-то не очень (я правда не знаю, насколько это не очень в 1С)
        Во-вторых все три условия можно совместить.
        Ответить
    • ненавидь 1с
      Ответить
    • Вся эта полная ересь может быть заменена такой конструкцией:
      Если ПустоеЗначение(Приказ) = 1 Тогда
      продолжить;
      КонецЕсли;
      Если Приказ.ТипПриказа <> Перечисление.ТипыПриказов.НаВнутреннееСо вмещение Тогда
      продолжить;
      КонецЕсли;
      Ответить
      • Первое условие в вашем коде неверно.
        А если в целом - не такая уж и ересь, вы не согласны?
        Ответить
      • Как ты зарегала такой ник?
        Ответить
        • Как ты понял, что она тян?
          Ответить
          • Всё просто: у неё на аватарке в Бормандостоке — тян.
            Ответить
            • Привет. Не желаешь со мной замутить? Ты из какого города?
              Ответить
              • Прости, но у нас ничего не выйдет. Я — 2D-тян, а ты —петух, да ещё и анскильный.
                Ответить
                • Ауменя?
                  Ответить
                  • Хуй зна… А, ну да. Тогда никто больше не знает.
                    Ответить
                • минусминуспетух?
                  Ответить
                  • MASHENKA. Плюс-реал. Я поимела двинуть на "Tsunami", я поимела плюс-похорошо в hoчу, я поимела 25% -free-пяо, я двинула с "Медведково" на "Olimpus", я поимела до-до-pauza-yebi-их, я поимела видеть много-много чоуди-policе-шагуа, я поимела видеть много-много mobi-robi, я поимела минус-похорошо в hoчу, я поимела много-много до-до-svalka-uyebi-их, я поимела razрыв-по-юйи-obo-еbo, я поимела много-много stopin-klopin, я поимела krik-по-трейсу, я поимела минус-минус-минус-похорошо в hoчу, я поимела porvaть пяо!
                    Ответить
                • Петух с два-дэ тянкой
                  Они, если честно,
                  Ответить
    • (Почитал. Вспомнил. Всплакнул.)
      А програмер молодец - разумные коменты пишет.
      Ответить
    • Мдя, высокоинтеллектуальный код. Похож на код Апокалипсиса.
      Ответить
    • Зарплата и кадры?
      Ну она же?!
      Не? Точно зарплата и управление персоналом!
      Ответить
    • КонецПоложить;
      Ответить

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