Как называется, когда в модуле много лишних процедур? #707548


#0 by komanch75
Встречаются такие самописные модули, где процедуры создаются лишние. Т.е. например кусок кода используется только один раз во всей программе, но он для чего-то вынесен отдельной процедурой. Или кусочек из двух - трех строчек используется всего два раза, но тоже вызывается отдельной процедурой. И это, часто, мешает читать программу. Вместо того, чтобы просто прочитать код, нужно перескакивать с одного места кода на другое, возвращаться назад,  запоминать, как автор обозвал свою процедуру и что она делает. А если таких лишних процедур еще и много... Просто поражает, неужели сейчас не учат хорошему тону в программировании? Я думал, что это называется заструктурированность кода, но погуглив, такого определения не нашел. Так как называется такое явление?
#0 by komanch75
Встречаются такие самописные модули, где процедуры создаются лишние. Т.е. например кусок кода используется только один раз во всей программе, но он для чего-то вынесен отдельной процедурой. Или кусочек из двух - трех строчек используется всего два раза, но тоже вызывается отдельной процедурой. И это, часто, мешает читать программу. Вместо того, чтобы просто прочитать код, нужно перескакивать с одного места кода на другое, возвращаться назад,  запоминать, как автор обозвал свою процедуру и что она делает. А если таких лишних процедур еще и много... Просто поражает, неужели сейчас не учат хорошему тону в программировании? Я думал, что это называется заструктурированность кода, но погуглив, такого определения не нашел. Так как называется такое явление?
#0 by komanch75
Встречаются такие самописные модули, где процедуры создаются лишние. Т.е. например кусок кода используется только один раз во всей программе, но он для чего-то вынесен отдельной процедурой. Или кусочек из двух - трех строчек используется всего два раза, но тоже вызывается отдельной процедурой. И это, часто, мешает читать программу. Вместо того, чтобы просто прочитать код, нужно перескакивать с одного места кода на другое, возвращаться назад,  запоминать, как автор обозвал свою процедуру и что она делает. А если таких лишних процедур еще и много... Просто поражает, неужели сейчас не учат хорошему тону в программировании? Я думал, что это называется заструктурированность кода, но погуглив, такого определения не нашел. Так как называется такое явление?
#1 by ДенисЧ
Это называется г*внокод.
#2 by Garykom
А может просто прокачать скилл чтения чужого кода?
#3 by DarKySiK
Какие мы нежные.
#4 by Адинэснег
гов'нокодом называются процедуры из 10к строк и более
#5 by Анцеранана
Тут как раз - хороший тон в программировании. Все типовые как раз "заструктурированы" , разве нет? Хотя для 2-х строчек - да, не надо отдельную процедуру делать, но для 10 уже надо))) Весь вопрос только в том , что имена процедур и функций понятные и адекватные должны быть.
#6 by Господин ПЖ
обычно борются с обратным когда все в одной функции - спагетти-код
#7 by Aleksandr N
Спагетти-код вроде.
#8 by Адинэснег
ТС так и делает, с ним и надо бороться
#9 by Адинэснег
зы, я в адекватности кодера начинаю сомневаться на 100й строке кода
#10 by su_mai
Макконела почитай
#11 by batmansoft
Спагетти код это кода код запутан и процедуры влияют друг на друга через глобальные переменные или прочую шнягу.
#12 by Адинэснег
вы так все тут говорите, как будто бы goto это что то плохое :)
#13 by Господин ПЖ
предлагаю сжечь у автора на спине пару томов "Совершенный код"
#14 by ДенисЧ
Спагетти - это совершенно другое
#15 by ДенисЧ
Кто говорит?
#16 by aka AMIGO
в адекватности предыдущего программера надо сомневаться сразу при открытия дерева метаданных
#17 by Господин ПЖ
ты пользуешь гото? покайся
#18 by ДенисЧ
Не собираюсь. Я, наоборот, горжусь тем, что могу использовать гото, не запутывая код...
#19 by Господин ПЖ
// а теперь позовем общую процедуру проверки писатели типовых сами с собой общаются в коде...
#20 by Starhan
>>Встречаются такие самописные модули Начало как у анекдота, встречаются такие две блондинки.
#21 by Господин ПЖ
парад будешь устраивать?
#22 by БледноЗолотистый
Где то было, что если появляется желание что либо прокомментировать в коде, то этот кусок необходимо выделить в отдельный метод.
#23 by Адинэснег
Лазанья-код
#24 by ДенисЧ
нет. Только массовые расстрелы.
#25 by su_mai
Тогда уж пицца-код :)
#26 by komanch75
Процедуру нужно создавать только тогда, когда этот кусок кода нужно вызывать НЕСКОЛЬКО раз. Если хочешь что-то закомментировать, что мешает сделать это в коде? Зачем, объясните мне, создавать процедуру, которая используется один раз, если это мешает читать программу? Только не надо цитат и отсылок к "столпам". Объясните своими словами.
#27 by komanch75
Спагетти-код это как раз, когда перскакиваешь с места на места. И это не только гото. Гото просто частный случай.
#28 by Адинэснег
в плане сопровождения имеет смысл разделять код на блоки, представь если какое-нибудь закрытие месяца запихать в одну процедуру
#29 by jsmith82
это называется острый дефицит ООП
#30 by НЕА123
часто не знаешь, сколько раз будет вызываться.
#31 by GedKo
>Зачем, объясните мне, создавать процедуру, которая используется один раз, если это мешает читать программу? чем мешает? переход к объявлению процедуры и возврат обратно в конфигураторе есть. а вот в отладке этот кусок кода, если он не нужен, гораздо легко перескочить.
#32 by su_mai
Ерунда! Процедуру фрагмент кода надо выносить в отдельный метод, когда у тебя есть желание написать комментарий к этому фрагменту кода. Название процедуры должно отражать суть выполняемого преобразования. У Макконела в книге "Совершенный код" - раздел "Самодокументирующийся код".
#33 by Адинэснег
попался мне тут один дядька, за 35 наверное, матерый якобы 8шник, не знающий о стеке-вызовов в отладке...
#34 by su_mai
Ну может у него все сразу всегда работало без отладки :)
#35 by Адинэснег
да нет, он и о табло не знал, отлаживал через бл**ь (!) текстовый файл!!
#36 by Адинэснег
+ точнее о вычислении значения, ну и о табло видимо тоже не в курсе был
#37 by БледноЗолотистый
во-во и я про это, зачем мозолить глаза об код процедуры, механизм работы которой и так понятен из названия. Даже если он вызывается один раз.
#38 by Garykom
Гм я тоже так делаю и что точнее через Сообщить("Тута") отлаживаю! Просто потому что практически без отладки пишу сразу рабочий код...
#39 by Garykom
+ Вот нафик нужен отладчик если там проводится больше времени чем за написанием собственно кода?
#40 by su_mai
>Просто потому что практически без отладки пишу сразу рабочий код... Это умиляет. Все к Макконелу!
#41 by DarKySiK
суров... сразу и рабочий... боже, что я делаю в этой профессии?
#42 by Адинэснег
сопровождаешь мало чужого кода значит
#43 by Garykom
угадал, больше своего пишу или дописываю типовые
#44 by StanLee
это называется цугцванг
#45 by Адинэснег
прям представляю сколько кода  и времени у тебя уходит на "Сообщить", когда в чужом коде нужно узнать что за дерево значений  лежит в переменной, и какие там 100500 типов значений, бгыы
#46 by Garykom
+ но скилл чтения чужого кода прокачан счас уже пофиг свой  вспоминать или чужой с нуля
#47 by Garykom
не не не  -этто я в мозгу прямо на лету делаю по коду
#48 by komanch75
"в плане сопровождения" это не аргумент. С практической точки зрения, какой смысл лишних процедур? Ну вот это может быть аргумент, соглашусь. Да вот мешает тем, что надо перескакивать с места на место, пусть даже для этого есть горячие кнопки. Запоминать, какие переменные ты туда передал, что делалось 10 строчками выше, что должна вернуть функция и т.п.
#49 by Адинэснег
да да, в мозг 50 тысяч строк сразу закидываешь и анализируешь
#50 by Адинэснег
->
#51 by Адинэснег
это не аргумент при автоматизации  ларька, согласен
#52 by Garykom
ну не 50 тысяч а скажем просто 50-100 строк сразу причем не обязательно все они подряд, нет читаю код и важные строки запоминаю потом анализирую что они в сумме делают
#53 by komanch75
а что Мак Конел по этому поводу говорит? Можно хоть небольшой отрывок? Может там как-то не так написано, или недочитано? Прямо вот так и говрит: Захотелось тебе что-нибудь накоментить, лепи новую процедуру и ничего не бойся, пусть другие после тебя по коду как кенгуру скачут и глаза с мозгами себе ломают?!
#54 by Apokalipsec
Все 1Сные разработки делаются по одним корпоративным стандартам: "х*як, х*як, в продакшен!". Все кто делают отсылки к "идеальному коду" должны быть сожжены как еретики!
#55 by DS
Это называется неправильное (или просто иное нераспространенное) восприятие кода. Если функция потенциально может использоваться более одного раза (не только в данной конфе) или имеет логическую завершенность, то ее необходимо выделить. И читать такой код намного легче (если функция имеет адекватное имя).
#56 by komanch75
т.е. внятного ответа не будет, а будут намеки на непрофессионализм? так я и думал.
#57 by Garykom
+500!
#58 by Garykom
угадал ))
#59 by Mikeware
Объясняю: функция или процедура делает некий законченый объем работы. Ее название и аргументы должны говорить сами за себя - что она делает, и что ей дается на вход. при такой заменеуже не нужно читать ее код.
#60 by Sdbfnew
от души посмеялся
#61 by Mikeware
почему сразу "намеки"? :-) открытым теккстом тебе об этом говорят...
#62 by Ненавижу 1С
если процедура много больше 1 экрана, то что-то надо делать исключения тексты запросов, но я их выделяю в отдельные процедуры тоже
#63 by komanch75
мне кажется - ключевое здесь "может использоваться более одного раза". Так кто бы спорил. Я же про другой вариант говорю сейчас.
#64 by Lama12
Излишняя декомпозиция. Но это всегда спорный момент разработки ПО.
#65 by DS
там не зря стоит "или"...
#66 by Адинэснег
какое восприятие, тут люди пишут для себя, для души так сказать... попадут в команду из 5-10 разрабов - будут бить по морде, возможно даже ногами
#67 by Garykom
Да однажды встетил при собеседовании при приеме на работу одного программиста который шел на 1С-ку хотя до этого писал на delphi и прочих c++ Так отпал после вопроса (до него еще додуматься надо было) а вы в 1С на русском или на английском пишите? Ответ был неудивительный после delphi )) естественно он на английском писал в 1С
#68 by Mikeware
Какой тебе Макконнелл? Начни хотя бы с ВанТассела...
#69 by Garykom
+ т.е. если он один то пофиг пусть как хочет пишет а вот в коллективе как когда стандарт и все привыкли русский использовать в операторах?
#70 by Адинэснег
надо было его спросить, как будет по-английски ИсточникДоступныхНастроекКомпоновкиДанных, и если бы он ошибся хоть на одну англобукву , посцать ему на грудь
#71 by ДенисЧ
А я одну полезную обработку, помнится, написал целиком на аглицком... Как мне благодарны были сопровожденцы после этого...
#72 by H A D G E H O G s
позабавил. Удачного ему erp
#73 by H A D G E H O G s
А я в тебе и не сомневался.
#74 by ДенисЧ
Ну хоть кто-то...
#75 by Apokalipsec
Вообще, прочитав заголовок, решил, что в теме про обфускацию. А оказалось как всегда..)
#76 by Garykom
нафик нафик никаких ерп в ближ время счас розницу мучаю типовую чтобы шашечки и ехала
#77 by Ненавижу 1С
еще бы свои функции в запросах можно было рисовать ))
#78 by Fish
Интерфейс такси делаешь? :))
#79 by komanch75
Ну а что значит Логическая завершенность функции? Допустим она создает элемент справочника. Но создавать элемент нужно в обработке только один раз. Ведь проще при чтении программы написать //Создаем элемент справочника ... //Создали элемент. Чем прыгать в другой конец кода, разбираться, что там создается элемент справочника (особенно если из названия не понятно, что делает эта процедура). Да и без комментариев проще прочитать код сразу, чем скакать куда-то, чтоб его прочитать.
#80 by Garykom
угу почти вот к примеру чтобы на кассе выдали новый сертификат на произвольную сумму - точнее ввели номенклатуру, сделали приход, и продали-пробили дохрена действий выходит а надо просто кнопочка открывается формочка где вводят номинал, номер сертификата и все оно все автоматом ввелося причем с формированием шк и добавление в чек номенклатуры и при пробитии вышло сертифиикат(с ШК поверх бланка) и чек к нему
#81 by Garykom
+ и такого при обычном внедрении дохрена просто в дописке типовых
#82 by Адинэснег
всё ясно
#83 by Apokalipsec
Ну конечно очень удобно такой код читать, когда в "выполнить" создаются элементы справочника, потом создаются документы, все это разбавлено тремя-четыремя запросами на 100+ строк, где получаются какие-то данные из регистров для заполнения этого документа. Очень хочется пожать таким разработчикам горло...
#84 by Garykom
+ и выходит чтоб банально записать штрихкод в номенклатуру в рознице или писать кучу своего кода или использовать телепат.dll и найти функции в типовой от разработчиков и как их юзать типа ПодключаемоеОборудованиеРТ.УстановитьШтрихкод(ШтрихКод, НоменклатураСсылка, , , ОписаниеОшибки);
#85 by H A D G E H O G s
Гыгыгы. Ты просто не видел УТ11.
#86 by Ненавижу 1С
Да, с документацией кода в типовых плохо, это факт
#87 by Garykom
видел, закрыл в ужасе ))
#88 by komanch75
Хорошо, а теперь другая ситуация: В коде где-то надо что-то исправить. Ты читаешь текст Выполнить, а там сплошные отсылки к процедурам с непонятными названиями. Тебе надо в каждую зайти и разобраться, правильно ли она все делает, а из нее идет вызов еще 10 процедур, а из каждой из них еще по 5. В итоге в конце ты уже забыл, с какого места кода ты сюда пришел. Так лучше? А так бы читал простыночку и понимал ход исполнения. Что зачем идет и где тут ошибка.
#89 by su_mai
Смысл в том, что бы при необходимости читать чужой код не пришлось сначала читать неправильно написанные комментарии к методам, а затем разбираться в коде метода. При этом чем более простой код метода тем легче и быстрее его можно понять. По этому не является "грехом" создавать маленькие методы для создания элементов справочника, так как поддержка такого метода проще, чем если бы этот код был в составе прочего кода.
#90 by Garykom
встречный вопрос, а зачем тебе в коде что то исправлять когда можно написать свой код в другом месте который сделает то что нужно, исправит данные или еще что? и потом другие которые за тобой придут матом не покроют за то что наисправлял вместо дописания?
#91 by Apokalipsec
Непонятные названия процедур - это совсем другая степь, в тебе написали, при чем тут их количество?
#92 by Ndochp
Ну ты умник братец. Создаем новый элемент справочника с десятком реквизитов. Один раз, 15 строк, но в цикле загрузки данных из эксель. И вот ты сидишь в отладчике и долбишь Ф10 как дятел вместо того, чтобы зайти в эту процедуру один раз по Ф11, убедиться, что она работает правильно, а в остальные разы спокойно ее пропускать за один шаг.
#93 by su_mai
Выполнить это жесть :) В 1С от неё рекомендуют отказываться, но когда это невозможно то...
#94 by komanch75
Хорошо, согласен, логически завершенные БОЛЬШИЕ куски, с нормальными названиями и еще и желательно - подробными комментами, я и сам выделяю в отдельные процедуры бывает. Но я про то, что зачем делать кучу процедур по 3 строчки, которые вызываются 1 раз?
#95 by su_mai
+ Макконел "Совершенный код", раздел 32.3. Комментировать или не комментировать? стр 764-767
#96 by komanch75
Я ж не про цикл говорю, а когда процедура вызывается ОДИН раз. Т.е. не в цикле, а просто в тексте модля.
#97 by andr_andrey
Жестоко, но эффективно.
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С