|   |   | 
| 
 | "Не" как антипаттерн програмирования | ☑ | ||
|---|---|---|---|---|
| 0
    
        Почему 1С 21.07.21✎ 09:05 | 
        Читаю код и постоянно спотыкаюсь на конструкциях типа (пропускаю эту НЕ)
 Если НЕ СтруктураТаблицДокумента.ТаблицаУслуги = Неопределено тогда Не читается этот код для меня, так писал код уважаемый бывший сотрудник программист 1с (но не уважаемый мной ) в конторе где я сейчас работаю, мало того что сам писал он еще и всех других приучил к такому. Мне они заявляют типа лучше писать через "НЕ" условия <>, на вопрос почему следует ответ так писал наш Ф.И.О. Наболело, это мой загон или действительно можно считать антипаттерном. Ситуации (не ЗначениеЗаполнено() не ... is null к этому не относятся в них с чтением кода проблем у меня нет) | |||
| 58
    
        mikecool 21.07.21✎ 12:36 | 
        +56 а то вдруг проблемы с чтением кода возникнут у кого то ))     | |||
| 59
    
        Почему 1С 21.07.21✎ 12:40 | 
        (55) Такое же мнение
 (56) Зачем передергивать, проблема лишь в конструкциях что я привел в (0), где НЕ визуально теряется в тексте, отдалено от непосредственной операции сравнения | |||
| 60
    
        mikecool 21.07.21✎ 12:42 | 
        (59) просто у меня нет такой проблемы, и я читаю такой код слева направо...     | |||
| 61
    
        Почему 1С 21.07.21✎ 12:47 | 
        (60) Понятно, видимо вам чужды эффекты с обманом зрения...     | |||
| 62
    
        mikecool 21.07.21✎ 12:54 | 
        (61) даже не знаю о таком     | |||
| 63
    
        fisher 21.07.21✎ 13:08 | 
        (62) Про оптические иллюзии в курсе? Ну вот это когда код в такое складывается. Страшная штука.     | |||
| 64
    
        Конструктор1С 21.07.21✎ 13:13 | 
        (56) "Если Не <булевая переменная>" проблем не создаёт
 Если Не Дурак Тогда ПойтиВПрограммисты(); КонецЕсли; проблемы создают такие вот уродства: Если Не ТребуетсяУказаниеДопДанных И ЗначениеЗаполнено(ПараметрыСканирования.ДокументОснование) И Не ЗначениеЗаполнено(ДанныеШтрихкода.Серия) И ДанныеДокументаОснования <> Неопределено Тогда | |||
| 65
    
        Злопчинский 21.07.21✎ 13:16 | 
        "уродство" читалось бы легче со скобками, типа 
 Если Не (ТребуетсяУказаниеДопДанных И ЗначениеЗаполнено(ПараметрыСканирования.ДокументОснование) И Не ЗначениеЗаполнено(ДанныеШтрихкода.Серия) И ДанныеДокументаОснования <> Неопределено) Тогда | |||
| 66
    
        Конструктор1С 21.07.21✎ 13:19 | 
        (65) скобки уродство не спасут. Тем более в данном случае, скобки поменяют логику проверки     | |||
| 67
    
        Mikeware 21.07.21✎ 13:21 | 
        (52) говнокод говнокодом, а понимание пониманием. 
 да, KISS никто не отменял, но и применение отрицания в разных случаях разное. Да и в скобках меня никто не не ограничивал... | |||
| 68
    
        Галахад гуру 21.07.21✎ 13:21 | 
        (64) Хм. И какие предложения?     | |||
| 69
    
        fisher 21.07.21✎ 13:23 | 
        (68) Вероятно, намекает на необходимость комментария или вынесения в отдельный предикат для разъяснения бизнес-кейса. Других идей нет :)     | |||
| 70
    
        Guk 21.07.21✎ 13:24 | 
        жжоте. столько постов обсуждать подобную хрень ;)...     | |||
| 71
    
        Почему 1С 21.07.21✎ 13:24 | 
        (64) это лишь посыл что мозг работает не как компьютер строго детерминировано, а непроизвольно может интерпретировать и искажать информацию, например как в оптических иллюзиях, либо умение мозга свободно читать слова в которых перемешаны буквы, в данном случае если не проявлять некую концентрацию, может вполне проигнорировать "Не".
 П.С. Давайте шуточки за триста, гагага он половину кода не видит когда читает код это клиника для тугодумов. | |||
| 72
    
        fisher 21.07.21✎ 13:25 | 
        (70) Ы. Кого это когда останавливало? Прививочные посты вообще бесконечным сериалом идут.     | |||
| 73
    
        Конструктор1С 21.07.21✎ 13:27 | 
        (68) в данном случае воняет уродливой декомпозицией, нужно пересматривать код. Минимум, чтобы читающий не ломал глаза и не ошибся при беглом чтении, можно вынести проверки в булевы переменные     | |||
| 74
    
        Конструктор1С 21.07.21✎ 13:31 | 
        (71) вот именно. Есть вероятность неправильного толкования. Как-минимум такой код заставляет остановиться и перечитать его несколько раз, обращаясь за подсказками и пояснениями к окружающему коду. Код здорового человека читается как простой текст, понимается с первого раза. Код курильщика нужно зачитывать и перечитывать, решая ребусы     | |||
| 75
    
        Галахад гуру 21.07.21✎ 13:32 | 
        (73) Покажи как это будет на примере из (64)     | |||
| 76
    
        Guk 21.07.21✎ 13:37 | 
        (74) забавно читать такие рассуждения. от кода требуется, чтобы он работал. и работал правильно. а как и кто его там будет читать, это проблемы того кто читает.
 зы: это ты код NS-а не видел. его без веществ вообще читать не возможно ;) но он написал таким кодом шахматы на 1С на уровне 2-го разряда, а ты вряд ли напишешь. пусть и красивым кодом... | |||
| 77
    
        Почему 1С 21.07.21✎ 13:40 | 
        (76) Главное чтобы работало - https://infostart.ru/1c/articles/966234/
 Неужели статья для вас будет открытием? | |||
| 78
    
        fisher 21.07.21✎ 13:42 | 
        (75) Если НеобходимоЗаполнитьХреньИзДокументаОснования Тогда // например
 Но как по мне и комментария было бы достаточно. (76) Забавно читать такие рассуждения. Так как они верны только для случаев, когда этот код не требует постоянной поддержки. В противном случае эти проблемы напрямую конвертируются в затраты нанимателя. И гораздо дешевле в этом случае работать с людьми, которые эти проблемы не генерят. | |||
| 79
    
        acht 21.07.21✎ 13:42 | 
        (76) > это проблемы того кто читает.
 Это пока ты в одиночку для себя любимого пишешь. И то, когда через месяца три вернещся к коду - начнешь на кофейной гуще гадать, что же тогда имелось в виду? > он написал таким кодом шахматы Вот-вот. Забавная такая хня, которой можно гордится. | |||
| 80
    
        StanLee 21.07.21✎ 13:44 | 
        я по удобству чтения кода ставлю, например мне удобнее читать такой код "НЕ ЗначениеЗаполнено()" и такой: "Если МояПеременная <> Неопределено"     | |||
| 81
    
        fisher 21.07.21✎ 13:45 | 
        (80) В общем случае это неравноценный код.     | |||
| 82
    
        Галахад гуру 21.07.21✎ 13:47 | 
        (78) Тут проблема в чтобы переменная точно передавала смысл условия. 
 И иногда в условие что-то может изменится, а вот имя переменной менять мало кто будет. | |||
| 83
    
        fisher 21.07.21✎ 13:48 | 
        А код NS'a - это конечно что-то с чем-то. Заглядывал я в его шахматы. Умный мужик, но из команды я бы его ссаными тряпками гнал. Ну или посадил на разработку черных ящиков, которые с большой вероятностью трогать не придется.     | |||
| 84
    
        Вафель 21.07.21✎ 13:54 | 
        (83) это все следствия олимпиадного программирования     | |||
| 85
    
        fisher 21.07.21✎ 13:56 | 
        (84) У него хоть оправдания были. Он там из 1С выжимал производительность, как алкоголик водку из дохлой кошки. Не удивлюсь, если бы он с фактами на руках доказал что длинные мнемонические замедляют его программу :)     | |||
| 86
    
        Конструктор1С 21.07.21✎ 14:03 | 
        (75) код лечится рефакторингом. Причёсывая говно получишь причёсанное говно. Поэтому нужно пересмотреть не только саму логическую проверку, но и окружающий код. Эта уродливая проверка уже сама по себе индикатор, что в коде проблемы. Когда код будет переписан по-человечачи, уродливая логическая проверка сама исчезнет     | |||
| 87
    
        fisher 21.07.21✎ 14:11 | 
        (86) А когда и рефакторинг кода не помогает - мы отрефакторим постановку задачи. Ты, случаем, не консалтером работаешь?     | |||
| 88
    
        Галахад гуру 21.07.21✎ 14:12 | 
        (86) Ну не знаю. По каким критериям код из (64) вообще попал в говнокод? Какие общепринятые стандарты он нарушает?     | |||
| 89
    
        fisher 21.07.21✎ 14:13 | 
        (88) Градиент наморщивания лба превышает ПДК.     | |||
| 90
    
        Guk 21.07.21✎ 14:17 | 
        (84) точно! хотя мне было объяснено, что это следствие не только олимпиадного, но и экстремального программирования ;)
 из-за этого и срались постоянно, когда приходилось что-то дописывать в его коде ;)... | |||
| 91
    
        Конструктор1С 21.07.21✎ 14:17 | 
        (87) нет. Не запускай код до плачевного состояния и не придётся страдать при рефакторинге     | |||
| 92
    
        fisher 21.07.21✎ 14:19 | 
        (91) Тебе видимо повезло работать с идеальными разработчиками и постановщиками. Если, конечно, под кодом здорового человека ты понимаешь не только собственный код. Я бы к такому даже и не подумал придираться. Хотя комментарий не помешал бы, конечно.     | |||
| 93
    
        Конструктор1С 21.07.21✎ 14:22 | 
        (88) в нем слишком сложное логическое условие     | |||
| 94
    
        StanLee 21.07.21✎ 14:23 | 
        вполне себе нормальное условие и читается нормально     | |||
| 95
    
        Конструктор1С 21.07.21✎ 14:23 | 
        (92) нет, не повезло. Постоянно вязну в говнокоде     | |||
| 96
    
        Guk 21.07.21✎ 14:23 | 
        (93) ;)...     | |||
| 97
    
        fisher 21.07.21✎ 14:24 | 
        (95) Если в таком, то тебе таки повезло.     | |||
| 98
    
        Галахад гуру 21.07.21✎ 14:27 | 
        (89) Если там таких условий куча, тогда да. А одно уж как-нибудь можно понять.
 (93) Нет. | |||
| 99
    
        Hans 21.07.21✎ 14:28 | 
        (0) Тоже считаю так делать нельзя. "Не" не надо по возможности.     | |||
| 100
    
        Почему 1С 21.07.21✎ 14:29 | 
        (92) Комментарий внутри функций с вероятностью 90% признак плохого кода. 
 К комментариям описаниям функции/процедуры это не относится | |||
| 101
    
        Конструктор1С 21.07.21✎ 14:30 | 
        (98) да. Приведу чуть больше этого говна. И это только часть одной уродской огромной процедуры. Попробуй разобраться, что вообще делает этот код?
 Если ДанныеШтрихкода <> Неопределено И Не ТребуетсяУказаниеДопДанных Тогда Если Не ТребуетсяУказаниеДопДанных И ПараметрыСканирования.ЗапрашиватьНоменклатуру И (Не ЗначениеЗаполнено(ДанныеШтрихкода.Номенклатура) Или Не ЗначениеЗаполнено(ДанныеШтрихкода.АлкогольнаяПродукция)) Тогда ТребуетсяУказаниеДопДанных = Истина; КонецЕсли; Если Не ТребуетсяУказаниеДопДанных И ЗначениеЗаполнено(ПараметрыСканирования.ДокументОснование) И Не ЗначениеЗаполнено(ДанныеШтрихкода.Серия) И ДанныеДокументаОснования <> Неопределено Тогда ПараметрыПоиска = Новый Структура; ПараметрыПоиска.Вставить("Номенклатура", ДанныеШтрихкода.Номенклатура); ПараметрыПоиска.Вставить("Характеристика", ДанныеШтрихкода.Характеристика); НайденныеСтроки = ДанныеДокументаОснования.НайтиСтроки(ПараметрыПоиска); Если НайденныеСтроки.Количество() > 0 И ЗначениеЗаполнено(НайденныеСтроки[0].Серия) Тогда ТребуетсяУказаниеДопДанных = Истина; КонецЕсли; КонецЕсли; КонецЕсли; | |||
| 102
    
        fisher 21.07.21✎ 14:34 | 
        И что неясного? Выясняется, требуется ли введение каких-то доп-данных. Выясни, что происходит при ТребуетсяУказаниеДопДанных и все станет ясно как божий день.     | |||
| 103
    
        StanLee 21.07.21✎ 14:35 | 
        если требуется запрашивать номенклатуру, но не указана номенклатура  или алкопродукция, то нужно требовать доп данные
 если же не требуется указание доп данных и нет серии и есть документ основание, то ищем нужную номенклатуру в документе основания если не нашли номенклатуру то требовать доп данные да все изумительно читается, просто изумительно, кодер молодец, надо выдать огурец! | |||
| 104
    
        StanLee 21.07.21✎ 14:37 | 
        нормальное человеческое чтение, прям как книгу читать
 а вот бывает "инженерное" чтение, когда все по шаблону и в непонятном порядке или в одну строку, и этот шаблон рвет мой внутренний шаблон, вот тогда грусть-печаль | |||
| 105
    
        fisher 21.07.21✎ 14:41 | 
        Если это часть громадной портянки, то код конечно неидеален в плане читабельности. Ее можно и повысить. Но до говнокода ему пилить и пилить. Сдается мне, что Галя балувана.     | |||
| 106
    
        Smallrat 21.07.21✎ 14:42 | 
        Мне как то пришлось разгребать такое:
 
 | |||
| 107
    
        Конструктор1С 21.07.21✎ 14:43 | 
        (102) этот говнокод несколько раз анализирует и сам же меняет один и тот же булев флаг. Допустить в таком ошибку при доработке, или неправильно истолковать его, - как два пальца об асфальт     | |||
| 108
    
        Почему 1С 21.07.21✎ 14:45 | 
        (106) Сейчас местные гении в раз слева на право его прочитают )))     | |||
| 109
    
        Guk 21.07.21✎ 14:48 | 
        (93) вот сложное условие ;)...
 Если ЗначениеЗаполнено(СтрокаТЗНоменклатура.РодительКод) И СокрЛП(СтрокаТЗНоменклатура.РодительКод) <> СокрЛП(СтрокаТЗДФ.RODKOD) ИЛИ СокрЛП(СтрокаТЗНоменклатура.Наименование) <> СокрЛП(СтрокаТЗДФ.NAIM) ИЛИ (СтрокаТЗНоменклатура.РодительКод <> СокрЛП(СтрокаТЗДФ.RODKOD)) ИЛИ НЕ СтрокаТЗНоменклатура.ЭтоГруппа И ( //проверка реквизитов элемента Найти(ВРЕГ(СокрЛП(СтрокаТЗНоменклатура.ЕдиницаИзмерения)), ВРЕГ(СокрЛП(СтрокаТЗДФ.OSNED))) = 0 ИЛИ СокрЛП(СтрокаТЗНоменклатура.НаименованиеПолное)<> СокрЛП(СтрокаТЗДФ.NAIM) ИЛИ СтрокаТЗНоменклатура.ВесЧислитель <> Число(СтрокаТЗДФ.OSNEDK) ИЛИ СтрокаТЗНоменклатура.ВесЗнаменатель <> 1 ИЛИ СтрокаТЗНоменклатура.СтавкаНДС <> Число(СокрЛП(СтрокаТЗДФ.NDS))/100 ИЛИ СтрокаТЗНоменклатура.КратностьЗаказа <> КратностьЗаказаИзФайла ИЛИ ЕстьКоличественныеПараметрыТовара И (СтрокаТЗНоменклатура.ОстатокТовара <> ОстатокИзФайла ИЛИ СтрокаТЗНоменклатура.СредниеПродажиТовара <> ПродажиИзФайла ИЛИ СтрокаТЗНоменклатура.ОжидаетсяПоступлениеТовара <> ВПутиИзФайла) ИЛИ СтрокаТЗНоменклатура.НетНаСкладе <> НетНаСкладеИзФайла ИЛИ СокрЛП(СтрокаТЗНоменклатура.Состав) <> СоставИзФайла ИЛИ СокрЛП(СтрокаТЗНоменклатура.СрокГодности) <> СрокГодностиИзФайла ИЛИ СтрокаТЗНоменклатура.СрокГодностиЧислом <> СрокГодностиЧисломИзФайла ИЛИ СокрЛП(СтрокаТЗНоменклатура.УсловияХранения) <> УсловияХраненияИзФайла ИЛИ СтрокаТЗНоменклатура.ПометкаУдаления <> ПометкаУдаленияИзФайла ИЛИ Найти(ВРЕГ(СокрЛП(СтрокаТЗНоменклатура.ЕдиницаВозврата)), ВРЕГ(СокрЛП(СтрокаТЗДФ.EDV))) = 0 ИЛИ СтрокаТЗНоменклатура.ВесЧислительВозврата <> ВесЧислительВозвратаИзФайла) //конец проверки реквизитов элемента Тогда | |||
| 110
    
        Галахад гуру 21.07.21✎ 14:49 | 
        (101) Этот код тоже не нарушает стандартов. Даже по когнитивной и цикломатической сложности.     | |||
| 111
    
        fisher 21.07.21✎ 14:53 | 
        (107) Да ну нет. Тут достаточно простой и понятный паттерн. Я бы просто в функцию вынес и сразу делал возврат при срабатывании очередной проверки.     | |||
| 112
    
        fisher 21.07.21✎ 14:57 | 
        А здесь так как решили оставить в портянке приходится каждый раз проверять - а имеет ли вообще смысл дальше проверять.     | |||
| 113
    
        Злопчинский 21.07.21✎ 15:29 | 
        (111) а это бяка. ругаются. возврат должен типа быть один.
 хотя я вот делаю как раз так - проверка - результат - возврат. или дальше если Не Результат ;-) так понятнее при чтении, а то проверка возврата нет.. хз что там еще внизу по коду будет.. а так - глянул и все понятно. как график нарядов по КПП | |||
| 114
    
        fisher 21.07.21✎ 15:40 | 
        (113) Пусть ругаются. Если код линейный а возвраты по понятному паттерну, то какая альтернатива? Ветвления? Или паттерн из (101)? Как по мне, с возвратами и читабельнее и производительнее.     | |||
| 115
    
        StanLee 21.07.21✎ 15:46 | 
        (109) этот код по-видимому писался с использованием некоего алкоголя, разбирать его также надо с использованием желательно того же самого напитка, иначе никак     | |||
| 116
    
        Конструктор1С 21.07.21✎ 16:17 | 
        (110) ты уверен? В этом коде нарушены важнейшие вещи - удобочитаемость и абстракция. Удобочитаемость скатилась в дерьмо, а абстракции просто нет, какое-то месиво из кода. Почему ты так рьяно защищаешь этот говнокод? Да и когнитивная сложность у кода чрезмерно высокая     | |||
| 117
    
        Конструктор1С 21.07.21✎ 16:19 | 
        (111) говно там, а нее паттерн. Обрати внимание на флаг ТребуетсяУказаниеДопДанных. Он несколько раз проверяется и тут же меняется. Самое настоящее ректальное программирование     | |||
| 118
    
        Конструктор1С 21.07.21✎ 16:20 | 
        (114) где ты там увидел линеный код?     | |||
| 119
    
        StanLee 21.07.21✎ 16:21 | 
        и как переделать этот код чтобы не был говнокодом? там вроде не такой сложный кусок программы чтобы дробить его на процедуры или тратить время на перестановку буковок     | |||
| 120
    
        Конструктор1С 21.07.21✎ 16:48 | 
        (119) там надо смотреть код по стеку выше. Выпрямить вышестоящий код, и большинство этих говнопроверок сами отпадут. Оставшиеся сложные проверки можно вынести в отдельные функции
 >>там вроде не такой сложный кусок программы чтобы дробить его на процедуры дробить на процедуры нужно не когда глаза закровоточат, а гораздо раньше. Чтобы была декомпозиция, уровни абстракции и вот это всё | |||
| 121
    
        fisher 21.07.21✎ 16:59 | 
        (117) Критикуя - предлагай. Мы подождем твоей альтернативы и сравним.
 (118) Ок. Код без сложных ветвлений (иначе), который вследствие этого читается линейно. Так буквоеды проглотят? | |||
| 122
    
        Конструктор1С 21.07.21✎ 17:06 | 
        (121) предлагаешь заморочиться и отрефакторить это дермо? А ради чего, чтобы доказать что код может быть читабельнее и линейнее? По-моему это и так очевидно     | |||
| 123
    
        fisher 21.07.21✎ 17:08 | 
        (122) Мне неочевидно. Мне действительно любопытно, на какие высоты тебе удастся поднять читабельность этого кода. И сравнить величину твоего пафоса с величиной разницы в читабельности.     | |||
| 124
    
        Конструктор1С 21.07.21✎ 17:10 | 
        (123) от это да... Называть говнокод говнокодом уже пафос? Рефакторить я умею, не сомневайся. В своей компании я даже обучаю это делать других     | |||
| 125
    
        fisher 21.07.21✎ 17:10 | 
        "я даже обучаю" - это многое объясняет в плане пафоса.     | |||
| 126
    
        Конструктор1С 21.07.21✎ 17:20 | 
        (125) да причём тут пафос? Рефакторинг и стремление сделать код лучше для тебя пафос?     | |||
| 127
    
        fisher 21.07.21✎ 17:29 | 
        Лично я вижу, что этот код можно декомпозировать и оформить аккуратнее. При декомпозиции уйдут и проверки флага, на которых тебя почему-то зациклило. Но чем этот код не является - так это говнокодом.
 Он линейно читается, имеет приемлемые названия переменных, не содержит повторяемого кода, не вызывает у меня никаких wtf и при необходимости рефакторится в пол-пинка. Если ты такой код называешь говнокодом, то для настоящего говнокода у тебя стопудов должно быть какое-то особое название. | |||
| 128
    
        fisher 21.07.21✎ 17:46 | 
        Вспоминается несколько конюшен, которые мне приходилось разгребать, чтобы внести требуемые заказчиком поправки. В первозданном виде я попросту не был на это способен, настолько там все было эпично.
 Начинаешь потихоньку разбираться, переименовывая переменные в процессе постижения их сакрального смысла. Особый кайф при этом когда они меняют свой смысл по ходу повествования. Потом переписываешь постигнутые кусочки на более лаконичные и без wtf. Потом аккуратно декомпозируешь повторяющийся код кое-где. Тоже поэтапно. Постепенно подбираешься к самому вкусному - запутанному лабиринту безусловных переходов в самых неожиданных местах. Из условий, из циклов - отовсюду. Распутываешь потихоньку этот клубок и переписываешь нормально. Когда картинка наконец начинает помещаться в мозгу не взрывая его, облегченно вздыхаешь и переписываешь окончательно. И! Наконец! Ты способен внести контролируемые изменения! Победа!!! Вот это я понимаю говнокод. А тебе анализ флага поперек горла встал. | |||
| 129
    
        Конструктор1С 21.07.21✎ 18:17 | 
        (128) вот вроде бы понимаешь губительность невразумительного кода, но почему оправдываешь непотребство в (101). Признайся, ведь тебе пришлось перечитать его несколько раз, побегать глазками ввер-вниз, прежде чем ты понял логику кода. А ведь это несчастные 20 строк кода. Было бы их 2000, пришлось бы изрядно побарахтаться. В этом и есть проблема плохого кода - он нещадно пожирает время и интеллектуальные ресурсы читающего тот самый код. Да, в программировании есть такой парадокс - плохой код стоит дорого, дороже качественного, отшлифованного кода     | |||
| 130
    
        vi0 21.07.21✎ 20:31 | 
        (0) плохой код, согласен
 с НЕ там две операции, и нужно внимание чуть больше напрягать при чтении по этой причине | |||
| 131
    
        Asmody 21.07.21✎ 20:41 | 
        (128) всё так, только в какой-то момент ты осознаёшь, что уже впёрся в код типовой, и всё, трындец     | |||
| 132
    
        Смотрящий 21.07.21✎ 20:53 | 
        (0) Из резюме можешь убрать пункт
 Умею читать чужой код | |||
| 133
    
        vi0 22.07.21✎ 03:59 | 
        (9) НЕ ЭтоНеГруппа <> Неопределено
 вполне возможно встретить | |||
| 134
    
        Конструктор1С 22.07.21✎ 07:05 | 
        (132) ценится умение писать качественный, гибкий код. А не умение копаться в чужих экскрементах. Второе лишь вынужденная мера, а не навык сам по себе     | |||
| 135
    
        fisher 22.07.21✎ 09:14 | 
        (129) Основные умственные усилия - это убедиться что этот код делает именно то, что он делает и ничего лишнего. Это исправляется банальным комментарием или простейшей декомпозицией. Говнокод так легко не победить.
 (133) Встретить еще и не то можно. Главное - самому такого не писать. | |||
| 136
    
        ДенисЧ 22.07.21✎ 09:16 | 
        (134) Плевать всем на твой код.
 Ценится умение быстро и качественно решать задачи. А если для решения задачи нужно раскопать копрокод - значит, ты должен это уметь. Если встанешь в позу "я один в белом, а всё остальное коричневое и плохо пахнет" - с тобой долго работать и разговаривать не будут | |||
| 137
    
        Галахад гуру 22.07.21✎ 09:37 | 
        (116) У 1С есть вполне вменяемые стандарты. Если код их не нарушает, уже как-то можно жить...
 И да, приведенный фрагмент кода, сам по себе не сложен. | |||
| 138
    
        fisher 22.07.21✎ 09:49 | 
        (136) Ну дык одно дело раскопать легаси, а другое дело когда твоя команда генерит копрокод. А как ты правильно заметил - "ценится умение быстро и качественно решать задачи". И для команды в целом это тоже верно. Ну и даже если разработка в одно лицо. Каким бы крутым копроархеологом ты ни был - ты все равно будешь тратить кучу времени на раскопки, повышая стоимость услуг для работодателя. Чистота кодовой базы - это актив. Если конечно речь о коде, который требует поддержки. Но 1С чаще всего и имеет дело с кодом, требующим поддержки.
 Чем чище и однообразнее пишет команда - тем эффективнее она решает задачи. Ну и как показывает практика, обычно наблюдается очевидная зависимость между чистотой кода и его эффективностью. Чисто пишут обычно программисты, достаточно грамотные и в вопросах эффективности тоже. Потому что опыт программиста развивается часто в таком направлении - сначала тебя заботит как вообще решать задачи, хоть как-нибудь. Потом с набором опыта начинаешь задумываться о том, как решать задачи эффективно. И наконец - как оформлять свои решения самодокументируемо и максимально удобно для возможных доработок в будущем. Последнее приходит обычно само собой с опытом долгой и серьезной работы на больших проектах (что ессно добавляет экспириенса и во многих других аспектах). Поэтому качество кода в первом приближении может немало рассказать и о бэкграунде программиста. Огромная прослойка программистов пишущих грязно - находятся на первом этапе со всеми вытекающими. | |||
| 139
    
        Почему 1С 22.07.21✎ 10:19 | 
        (136) Да конечно, всем плевать на начальном этапе, а то что в таких системах со временем на основе этого копрокода задачи решать приходится на порядке дольше не задумывался?
 (134) Жму руку, я думал тут адекватных людей больше будет, в некоторых прямо разочаровался. | |||
| 140
    
        Asmody 22.07.21✎ 10:22 | 
        (139) "я думал тут адекватных людей больше будет" - мы просто очень давно уже тут сидим.     | |||
| 141
    
        ДенисЧ 22.07.21✎ 10:23 | 
        (138) (139) Я не совсем понял.
 Вы решили, что я агитирую писать какашкокод? Я вообще отвечал на "А не умение копаться в чужих экскрементах". | |||
| 142
    
        rsv 22.07.21✎ 10:36 | 
        (0) верно. Есть же <>     | |||
| 143
    
        rsv 22.07.21✎ 10:37 | 
        А можно еще в типовых динамически через стопитцот процедур собирать
 Текст запроса . Сопровождение таких подходов равно 0 . | |||
| 144
    
        mikecool 22.07.21✎ 10:40 | 
        разбираешь такой копрокод, материшься и думаешь - какой гад это написал?
 и тут до тебя доходит, что это твой код трехмесячной давности... занавес | |||
| 145
    
        mikecool 22.07.21✎ 10:42 | 
        +144 сейчас как раз занимаюсь рефактором своего ОМ строк на 6к
 так много и так безжалостно я еще не выкашивал ))) | |||
| 146
    
        fisher 22.07.21✎ 11:06 | 
        (141) А что я должен был решить глядя на "плевать всем на твой код"? Если всем плевать - значит нет причин не писать какашкокод.     | |||
| 147
    
        Конструктор1С 22.07.21✎ 13:39 | 
        (136)
 >>Ценится умение быстро и качественно решать задачи Ты не сможешь быстро и качественно решить задачу, если кругом говнокод: 1. Говнокод нещадно гробит время. На то, что можно было сделать за пару часов, уходят дни, а то и недели 2. Говнокод пораждает новый говнокод. Про качество можно забыть | |||
| 148
    
        vi0 22.07.21✎ 14:25 | 
        (135) главное чтобы человек был щаслис     | |||
| 149
    
        ManyakRus 22.07.21✎ 14:27 | 
        Не надо доделывать чужой код. Чужой код надо сразу стирать и делать заново :)
 (кроме типового кода конфигурации) | |||
| 150
    
        dubolom 22.07.21✎ 14:27 | 
        Людей, не пишущих говнокода вообще, очень мало, и они на вес золота. Потому что задача не просто в том, чтобы писать нормально, а и в том, чтобы планировать время правильно - всех опросить, всё проанализировать, написать прямыми руками.     | |||
| 151
    
        vi0 22.07.21✎ 14:38 | 
        (150) во франчах на вез золота быстрые копрокодеры     | |||
| 152
    
        dubolom 22.07.21✎ 14:42 | 
        (151) Франчи как раз потому существуют и даже получают прибыль, что хороших 1с-ников очень мало. Даже среднего 1с-ника нанять выгоднее в 95% случаев, чем с франчами дело иметь.     | |||
| 153
    
        Smallrat 22.07.21✎ 14:54 | 
        (152) кхм, нет - свой 1Сник сидит и каждый месяц требует "атста" независимо от того сколько он сделал и это будет бесконечно (потому что отказаться от своего 1Сника, раз он появился, тяжело), франч тебе что-то накрутил на миллион-два и дальше ты ему за поддержку тыщ 10-20 (если от него ничего особенного не требуется) в месяц башляешь и всё.     | |||
| 154
    
        dubolom 22.07.21✎ 14:55 | 
        (153) Это если компания особо не развивается и всякой новой фигни не внедряете.     | |||
| 155
    
        Smallrat 22.07.21✎ 15:00 | 
        (154) ситуации конечно разные бывают - но все же, даже если развиваетесь, то есть участки, на которые не хочется отвлекать своих 1сников типа ЗУПа или чего-нить подобного, у них может даже компетенций соответствующих нет, а работы там немного, чтобы окунать своего человека туда, проще бывает франч натравить на этот участок и пусть он с ним возится. Я конечно имею в виду нормальные франчи с нормальными спецами и пониманием ответственности, а не те, которые студентов натаскивают за миску супа.     | |||
| 156
    
        Pprog151713 22.07.21✎ 15:50 | 
        Если остальное все нормально. То это не проблема вообще. Патерн не патерн.     | |||
| 157
    
        Kassern 22.07.21✎ 15:53 | 
        (100) ну да ну да, вы это еще разработчикам типовых скажите)
 Для Каждого СтрокаСхемыРасчета Из СхемаРасчета Цикл // Инициализируем параметры расчета. ПараметрыЗапускаРасчетаПериода = ИнициализироватьПараметрыЗапускаРасчетаПериода(СтрокаСхемыРасчета); ПараметрыЗапускаРасчетаПериода.Вставить("ВыполняетсяОбновлениеИБ", Истина); // Формирует временные таблицы: // - ВТУчетныеПолитикиОрганизаций (учетные политики рассчитываемых организаций) // - ВТУчетныеПолитикиПрошлогоПериода (аналогично, но за предыдущий месяц) // - ВТПравилаЗаполненияПоляТипЗаписи (правила проверки первичных записей регистра себестоимости) // - ВТОтборАналитикаПоПартнерам (ключи аналитики партнеров с рассчитываемыми организациями) // - ВТСтоимостьПартийТоваров (расширенный аналог регистра сведений СтоимостьТоваров с полями партий; пока пустая). ИнициализироватьПараметрыРасчетаПартий(ПараметрыЗапускаРасчетаПериода, ПараметрыРасчета, ПараметрыОтладки); // Этап 0 - подготовка к расчету // - исправляет некорректные исходные данные // - выполняет проверку данных. ПодготовкаИсходныхДанныхКРасчету(ПараметрыРасчета); | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |