Бухгалтерия / Говнокод #1723 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
Если Приказ.Выбран() = 1 Тогда
			Если Приказ.Вид() = "Приказ" Тогда
				// это все-таки приказ
				Если Приказ.ТипПриказа <> Перечисление.ТипыПриказов.НаВнутреннееСовмещение Тогда
					// но приказ другой, не внутреннее совмещение
					Продолжить;
				КонецЕсли;
			Иначе
				Продолжить;
			КонецЕсли;
		Иначе
			Продолжить;
		КонецЕсли;

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

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

Запостил: Полупрограммисты Полупрограммисты, (Updated )

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

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


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

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

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

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

Переведи на "PHP", guest!

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


    8