Имя: Пароль:
IT
 
Как называется, когда в модуле много лишних процедур?
0 komanch75
 
06.05.14
15:25
Встречаются такие самописные модули, где процедуры создаются лишние. Т.е. например кусок кода используется только один раз во всей программе, но он для чего-то вынесен отдельной процедурой. Или кусочек из двух - трех строчек используется всего два раза, но тоже вызывается отдельной процедурой. И это, часто, мешает читать программу. Вместо того, чтобы просто прочитать код, нужно перескакивать с одного места кода на другое, возвращаться назад,  запоминать, как автор обозвал свою процедуру и что она делает. А если таких лишних процедур еще и много... Просто поражает, неужели сейчас не учат хорошему тону в программировании?
Я думал, что это называется заструктурированность кода, но погуглив, такого определения не нашел. Так как называется такое явление?
1 ДенисЧ
 
06.05.14
15:27
Это называется г*внокод.
2 Garykom
 
гуру
06.05.14
15:28
(0) А может просто прокачать скилл чтения чужого кода?
3 DarKySiK
 
06.05.14
15:29
(0) Какие мы нежные.
4 Адинэснег
 
06.05.14
15:29
(1)гов'нокодом называются процедуры из 10к строк и более
5 Анцеранана
 
06.05.14
15:29
Тут как раз - хороший тон в программировании. Все типовые как раз "заструктурированы" , разве нет? Хотя для 2-х строчек - да, не надо отдельную процедуру делать, но для 10 уже надо))) Весь вопрос только в том , что имена процедур и функций понятные и адекватные должны быть.
6 Господин ПЖ
 
06.05.14
15:29
обычно борются с обратным когда все в одной функции - спагетти-код
7 Aleksandr N
 
06.05.14
15:29
(0) Спагетти-код вроде.
8 Адинэснег
 
06.05.14
15:30
(6) ТС так и делает, с ним и надо бороться
9 Адинэснег
 
06.05.14
15:31
зы, я в адекватности кодера начинаю сомневаться на 100й строке кода
10 su_mai
 
06.05.14
15:31
(0) Макконела почитай
11 batmansoft
 
06.05.14
15:33
(7) Спагетти код это кода код запутан и процедуры влияют друг на друга через глобальные переменные или прочую шнягу.
12 Адинэснег
 
06.05.14
15:33
вы так все тут говорите, как будто бы goto это что то плохое :)
13 Господин ПЖ
 
06.05.14
15:33
(8) предлагаю сжечь у автора на спине пару томов "Совершенный код"
14 ДенисЧ
 
06.05.14
15:33
(6) (7) Спагетти - это совершенно другое
15 ДенисЧ
 
06.05.14
15:33
(12) Кто говорит?
16 aka AMIGO
 
06.05.14
15:33
(9) в адекватности предыдущего программера надо сомневаться сразу при открытия дерева метаданных
17 Господин ПЖ
 
06.05.14
15:34
(15) ты пользуешь гото? покайся
18 ДенисЧ
 
06.05.14
15:34
(17) Не собираюсь. Я, наоборот, горжусь тем, что могу использовать гото, не запутывая код...
19 Господин ПЖ
 
06.05.14
15:35
// а теперь позовем общую процедуру проверки

писатели типовых сами с собой общаются в коде...
20 Starhan
 
06.05.14
15:35
(0)>>Встречаются такие самописные модули
Начало как у анекдота, встречаются такие две блондинки.
21 Господин ПЖ
 
06.05.14
15:35
(18) парад будешь устраивать?
22 Бледно Золотистый
 
06.05.14
15:36
Где то было, что если появляется желание что либо прокомментировать в коде, то этот кусок необходимо выделить в отдельный метод.
23 Адинэснег
 
06.05.14
15:36
Лазанья-код
24 ДенисЧ
 
06.05.14
15:38
(21) нет. Только массовые расстрелы.
25 su_mai
 
06.05.14
15:39
(23) Тогда уж пицца-код :)
26 komanch75
 
06.05.14
15:39
Процедуру нужно создавать только тогда, когда этот кусок кода нужно вызывать НЕСКОЛЬКО раз. Если хочешь что-то закомментировать, что мешает сделать это в коде?
Зачем, объясните мне, создавать процедуру, которая используется один раз, если это мешает читать программу?
Только не надо цитат и отсылок к "столпам". Объясните своими словами.
27 komanch75
 
06.05.14
15:41
Спагетти-код это как раз, когда перскакиваешь с места на места. И это не только гото. Гото просто частный случай.
28 Адинэснег
 
06.05.14
15:42
(26) в плане сопровождения имеет смысл разделять код на блоки, представь если какое-нибудь закрытие месяца запихать в одну процедуру
29 jsmith82
 
06.05.14
15:43
это называется острый дефицит ООП
30 НЕА123
 
06.05.14
15:44
(26)
часто не знаешь, сколько раз будет вызываться.
31 GedKo
 
06.05.14
15:44
>Зачем, объясните мне, создавать процедуру, которая используется один раз, если это мешает читать программу?

чем мешает? переход к объявлению процедуры и возврат обратно в конфигураторе есть. а вот в отладке этот кусок кода, если он не нужен, гораздо легко перескочить.
32 su_mai
 
06.05.14
15:46
(26) Ерунда! Процедуру фрагмент кода надо выносить в отдельный метод, когда у тебя есть желание написать комментарий к этому фрагменту кода. Название процедуры должно отражать суть выполняемого преобразования. У Макконела в книге "Совершенный код" - раздел "Самодокументирующийся код".
33 Адинэснег
 
06.05.14
15:46
попался мне тут один дядька, за 35 наверное, матерый якобы 8шник, не знающий о стеке-вызовов в отладке...
34 su_mai
 
06.05.14
15:47
(33) Ну может у него все сразу всегда работало без отладки :)
35 Адинэснег
 
06.05.14
15:48
(34) да нет, он и о табло не знал, отлаживал через бл**ь (!) текстовый файл!!
36 Адинэснег
 
06.05.14
15:48
+(35) точнее о вычислении значения, ну и о табло видимо тоже не в курсе был
37 Бледно Золотистый
 
06.05.14
15:49
(32) во-во и я про это, зачем мозолить глаза об код процедуры, механизм работы которой и так понятен из названия. Даже если он вызывается один раз.
38 Garykom
 
гуру
06.05.14
15:50
(35) Гм я тоже так делаю и что точнее через Сообщить("Тута") отлаживаю!

Просто потому что практически без отладки пишу сразу рабочий код...
39 Garykom
 
гуру
06.05.14
15:51
+(38) Вот нафик нужен отладчик если там проводится больше времени чем за написанием собственно кода?
40 su_mai
 
06.05.14
15:51
(38) >Просто потому что практически без отладки пишу сразу рабочий код...

Это умиляет. Все к Макконелу!
41 DarKySiK
 
06.05.14
15:51
(38) суров... сразу и рабочий... боже, что я делаю в этой профессии?
42 Адинэснег
 
06.05.14
15:52
(38) сопровождаешь мало чужого кода значит
43 Garykom
 
гуру
06.05.14
15:53
(42) угадал, больше своего пишу или дописываю типовые
44 StanLee
 
06.05.14
15:53
это называется цугцванг
45 Адинэснег
 
06.05.14
15:54
(38) прям представляю сколько кода  и времени у тебя уходит на "Сообщить", когда в чужом коде нужно узнать что за дерево значений  лежит в переменной, и какие там 100500 типов значений, бгыы
46 Garykom
 
гуру
06.05.14
15:54
+(43) но скилл чтения чужого кода прокачан счас уже пофиг свой  вспоминать или чужой с нуля
47 Garykom
 
гуру
06.05.14
15:54
(45) не не не  -этто я в мозгу прямо на лету делаю по коду
48 komanch75
 
06.05.14
15:55
(28) "в плане сопровождения" это не аргумент. С практической точки зрения, какой смысл лишних процедур? (30) Ну вот это может быть аргумент, соглашусь.
(31) Да вот мешает тем, что надо перескакивать с места на место, пусть даже для этого есть горячие кнопки. Запоминать, какие переменные ты туда передал, что делалось 10 строчками выше, что должна вернуть функция и т.п.
49 Адинэснег
 
06.05.14
15:55
да да, в мозг 50 тысяч строк сразу закидываешь и анализируешь
50 Адинэснег
 
06.05.14
15:56
(49)->(47)
51 Адинэснег
 
06.05.14
15:56
(48) это не аргумент при автоматизации  ларька, согласен
52 Garykom
 
гуру
06.05.14
15:58
(49) ну не 50 тысяч а скажем просто 50-100 строк сразу причем не обязательно все они подряд, нет читаю код и важные строки запоминаю потом анализирую что они в сумме делают
53 komanch75
 
06.05.14
15:59
(40) а что Мак Конел по этому поводу говорит? Можно хоть небольшой отрывок? Может там как-то не так написано, или недочитано?
Прямо вот так и говрит: Захотелось тебе что-нибудь накоментить, лепи новую процедуру и ничего не бойся, пусть другие после тебя по коду как кенгуру скачут и глаза с мозгами себе ломают?!
54 Apokalipsec
 
06.05.14
15:59
Все 1Сные разработки делаются по одним корпоративным стандартам: "х*як, х*як, в продакшен!".
Все кто делают отсылки к "идеальному коду" должны быть сожжены как еретики!
55 DS
 
06.05.14
15:59
(48) Это называется неправильное (или просто иное нераспространенное) восприятие кода.
Если функция потенциально может использоваться более одного раза (не только в данной конфе) или имеет логическую завершенность, то ее необходимо выделить. И читать такой код намного легче (если функция имеет адекватное имя).
56 komanch75
 
06.05.14
16:00
(51) т.е. внятного ответа не будет, а будут намеки на непрофессионализм? так я и думал.
57 Garykom
 
гуру
06.05.14
16:00
(55) +500!
58 Garykom
 
гуру
06.05.14
16:00
(56) угадал ))
59 Mikeware
 
06.05.14
16:00
(26) Объясняю: функция или процедура делает некий законченый объем работы. Ее название и аргументы должны говорить сами за себя - что она делает, и что ей дается на вход.
при такой заменеуже не нужно читать ее код.
60 Sdbfnew
 
06.05.14
16:01
(0) от души посмеялся
61 Mikeware
 
06.05.14
16:01
(56) почему сразу "намеки"? :-)
открытым теккстом тебе об этом говорят...
62 Ненавижу 1С
 
гуру
06.05.14
16:01
если процедура много больше 1 экрана, то что-то надо делать

исключения тексты запросов, но я их выделяю в отдельные процедуры тоже
63 komanch75
 
06.05.14
16:01
(55) мне кажется - ключевое здесь "может использоваться более одного раза". Так кто бы спорил. Я же про другой вариант говорю сейчас.
64 Lama12
 
06.05.14
16:02
(56) Излишняя декомпозиция.
Но это всегда спорный момент разработки ПО.
65 DS
 
06.05.14
16:02
(63) там не зря стоит "или"...
66 Адинэснег
 
06.05.14
16:03
(55) какое восприятие, тут люди пишут для себя, для души так сказать... попадут в команду из 5-10 разрабов - будут бить по морде, возможно даже ногами
67 Garykom
 
гуру
06.05.14
16:03
Да однажды встетил при собеседовании при приеме на работу одного программиста который шел на 1С-ку хотя до этого писал на delphi и прочих c++

Так отпал после вопроса (до него еще додуматься надо было) а вы в 1С на русском или на английском пишите? Ответ был неудивительный после delphi )) естественно он на английском писал в 1С
68 Mikeware
 
06.05.14
16:03
(53) Какой тебе Макконнелл? Начни хотя бы с ВанТассела...
69 Garykom
 
гуру
06.05.14
16:04
+(67) т.е. если он один то пофиг пусть как хочет пишет а вот в коллективе как когда стандарт и все привыкли русский использовать в операторах?
70 Адинэснег
 
06.05.14
16:07
(67) надо было его спросить, как будет по-английски ИсточникДоступныхНастроекКомпоновкиДанных, и если бы он ошибся хоть на одну англобукву , посцать ему на грудь
71 ДенисЧ
 
06.05.14
16:09
(67) А я одну полезную обработку, помнится, написал целиком на аглицком... Как мне благодарны были сопровожденцы после этого...
72 H A D G E H O G s
 
06.05.14
16:10
Garykom позабавил.

Удачного ему erp
73 H A D G E H O G s
 
06.05.14
16:10
(71) А я в тебе и не сомневался.
74 ДенисЧ
 
06.05.14
16:11
(73) Ну хоть кто-то...
75 Apokalipsec
 
06.05.14
16:11
Вообще, прочитав заголовок, решил, что в теме про обфускацию.
А оказалось как всегда..)
76 Garykom
 
гуру
06.05.14
16:11
(72) нафик нафик никаких ерп в ближ время счас розницу мучаю типовую чтобы шашечки и ехала
77 Ненавижу 1С
 
гуру
06.05.14
16:12
еще бы свои функции в запросах можно было рисовать ))
78 Fish
 
06.05.14
16:12
(76) Интерфейс такси делаешь? :))
79 komanch75
 
06.05.14
16:13
(65) Ну а что значит Логическая завершенность функции?
Допустим она создает элемент справочника. Но создавать элемент нужно в обработке только один раз. Ведь проще при чтении программы написать //Создаем элемент справочника ... //Создали элемент. Чем прыгать в другой конец кода, разбираться, что там создается элемент справочника (особенно если из названия не понятно, что делает эта процедура).
Да и без комментариев проще прочитать код сразу, чем скакать куда-то, чтоб его прочитать.
80 Garykom
 
гуру
06.05.14
16:16
(78) угу почти вот к примеру чтобы на кассе выдали новый сертификат на произвольную сумму - точнее ввели номенклатуру, сделали приход, и продали-пробили
дохрена действий выходит
а надо просто кнопочка открывается формочка где вводят номинал, номер сертификата и все оно все автоматом ввелося причем с формированием шк и добавление в чек номенклатуры и при пробитии вышло сертифиикат(с ШК поверх бланка) и чек к нему
81 Garykom
 
гуру
06.05.14
16:17
+(80) и такого при обычном внедрении дохрена просто в дописке типовых
82 Адинэснег
 
06.05.14
16:17
всё ясно
83 Apokalipsec
 
06.05.14
16:18
(79) Ну конечно очень удобно такой код читать, когда в "выполнить" создаются элементы справочника, потом создаются документы, все это разбавлено тремя-четыремя запросами на 100+ строк, где получаются какие-то данные из регистров для заполнения этого документа.

Очень хочется пожать таким разработчикам горло...
84 Garykom
 
гуру
06.05.14
16:18
+(80) и выходит чтоб банально записать штрихкод в номенклатуру в рознице или писать кучу своего кода или использовать телепат.dll и найти функции в типовой от разработчиков и как их юзать типа ПодключаемоеОборудованиеРТ.УстановитьШтрихкод(ШтрихКод, НоменклатураСсылка, , , ОписаниеОшибки);
85 H A D G E H O G s
 
06.05.14
16:20
(84) Гыгыгы. Ты просто не видел УТ11.
86 Ненавижу 1С
 
гуру
06.05.14
16:20
(84) Да, с документацией кода в типовых плохо, это факт
87 Garykom
 
гуру
06.05.14
16:23
(85) видел, закрыл в ужасе ))
88 komanch75
 
06.05.14
16:23
(83) Хорошо, а теперь другая ситуация:
В коде где-то надо что-то исправить. Ты читаешь текст Выполнить, а там сплошные отсылки к процедурам с непонятными названиями. Тебе надо в каждую зайти и разобраться, правильно ли она все делает, а из нее идет вызов еще 10 процедур, а из каждой из них еще по 5. В итоге в конце ты уже забыл, с какого места кода ты сюда пришел.
Так лучше?
А так бы читал простыночку и понимал ход исполнения. Что зачем идет и где тут ошибка.
89 su_mai
 
06.05.14
16:26
(53) Смысл в том, что бы при необходимости читать чужой код не пришлось сначала читать неправильно написанные комментарии к методам, а затем разбираться в коде метода. При этом чем более простой код метода тем легче и быстрее его можно понять.

По этому не является "грехом" создавать маленькие методы для создания элементов справочника, так как поддержка такого метода проще, чем если бы этот код был в составе прочего кода.
90 Garykom
 
гуру
06.05.14
16:26
(88) встречный вопрос, а зачем тебе в коде что то исправлять когда можно написать свой код в другом месте который сделает то что нужно, исправит данные или еще что?
и потом другие которые за тобой придут матом не покроют за то что наисправлял вместо дописания?
91 Apokalipsec
 
06.05.14
16:27
(88) Непонятные названия процедур - это совсем другая степь, в (59) тебе написали, при чем тут их количество?
92 Ndochp
 
06.05.14
16:27
(79) Ну ты умник братец. Создаем новый элемент справочника с десятком реквизитов. Один раз, 15 строк, но в цикле загрузки данных из эксель.
И вот ты сидишь в отладчике и долбишь Ф10 как дятел вместо того, чтобы зайти в эту процедуру один раз по Ф11, убедиться, что она работает правильно, а в остальные разы спокойно ее пропускать за один шаг.
93 su_mai
 
06.05.14
16:27
(88) Выполнить это жесть :) В 1С от неё рекомендуют отказываться, но когда это невозможно то...
94 komanch75
 
06.05.14
16:29
(89) Хорошо, согласен, логически завершенные БОЛЬШИЕ куски, с нормальными названиями и еще и желательно - подробными комментами, я и сам выделяю в отдельные процедуры бывает. Но я про то, что зачем делать кучу процедур по 3 строчки, которые вызываются 1 раз?
95 su_mai
 
06.05.14
16:30
+(89) Макконел "Совершенный код", раздел 32.3. Комментировать или не комментировать? стр 764-767
96 komanch75
 
06.05.14
16:30
(92) Я ж не про цикл говорю, а когда процедура вызывается ОДИН раз. Т.е. не в цикле, а просто в тексте модля.
97 andr_andrey
 
06.05.14
16:30
(13) Жестоко, но эффективно.
98 Ndochp
 
06.05.14
16:31
(88) А ты при отладке все последовательно читаешь, и только текущую строчку. Так что пофиг, куда скакать. А если забыл контекст, то всегда можно по стеку прыгнуть вверх и вернуться.
А уж если возник "выполнить" то тебе полюбому труба, так как в выполнении константы смысла нет, а в праметрических выполнить все рано опа.
99 rsv
 
06.05.14
16:31
(0) Это назвается экстремальное программирование.
100 Garykom
 
гуру
06.05.14
16:31
(94) легче читается основной код откуда они вызываются? там нет простыни из этих много по 3 строчки вместо них вызовы процедур/функций?
101 komanch75
 
06.05.14
16:32
(90) Т.е. пусть прога сначала отработает неправильно, а затем вызовет процедуру и все за собой подчистит?
Первый раз встречаю такой подход.
102 su_mai
 
06.05.14
16:33
(94) Это нужно для того, что бы выделить логически завершенное преобразование данных в отдельный метод. В дальнейшем, справочник может дополниться прочими реквизитами. Тогда не придется ковырять код непонятно где, ты точно знаешь, что элементы справочника создаются в этом методе...
103 Garykom
 
гуру
06.05.14
16:33
(101) нормальный подход, чем не нравится?
У вас цель написать идельный код или чтоб работало и легко сопровождалось/изменялось?
104 Ndochp
 
06.05.14
16:34
(96) Так не пофиг ли, в цикле или нет. В коде то все равно один раз.
А три строчки обычно выделяются либо в модуль "переопределяемый" или в нескольких местах вызываются. А если вызывается хотя-бы в двух местах одно и тоже, то это уже повод задуматься о процедуре даже из одной строки. Так как потом стопудово забудешь синхронно поправить.
105 komanch75
 
06.05.14
16:34
(100) конечно легче. читаешь по порядку и все, ничего не повторяется, все идет так, как исполняется. а лучше скакать из процедуры в процедуру и на 10-м вызове забыть точку входа в первый?
106 Ndochp
 
06.05.14
16:36
(105) Как ты можешь при открытом окне стека забыть, откуда ты вызвался?
107 andr_andrey
 
06.05.14
16:36
(0) Весь сыр бор только в уровнях абстракции. Для того чтобы не смешивать в коде эти уровни, и делают процедуры/функции с красноречивыми именами, которые вызываются всего 1-2 раза.
108 Mikeware
 
06.05.14
16:51
(106) у него "память - как один килобайт. вроде и есть - и хрен что запомнишь!"©
109 komanch75
 
06.05.14
16:52
(106) В окне стека только названия процедур, я могу забыть, что в них происходило. Я могу забыть еще, что означают и откуда берутся переданные в процедуру переменные. А еще я могу читать код не при отладке, а просто, и тогда не могу вызвать окно стека.
110 Garykom
 
гуру
06.05.14
16:57
Эта предлагаю вместо конкурсов по программированию сделать конкурс по депрограммированию, т.е. по написанному коду понять и расписать что и где происходит ))

Сразу стока внедренцев 1С на 1-е места выйдут...
111 komanch75
 
06.05.14
16:57
(108) Под старость память ухудшается, а профессия остается. Грех смеятся над пожилыми людьми.
Да и у многих молодых память не ахти.
112 komanch75
 
06.05.14
16:59
(110) Так при сопровождении и доработках это и есть основная задача - найти что где происходит. Каждый наверно был бы рад быть только разработчиком, но такой работы гораздо меньше.
113 Ndochp
 
06.05.14
17:50
(109) А ты по нему пощелкай. Как раз аккуратно перемещаешься между уровнями абстракции при правильно написанном коде.
114 Адинэснег
 
06.05.14
19:45
(109) пффф... как будто код  скрывается при этом...
наоборот, когда программа состоит из нескольких тысяч строк, тебе не обязательно шагать в отладке по всем кускам, а перепрыгнуть блок из пары или десятка тысяч строк не заходя в этот блок (это когда в 1Ске жмакаешь F10 "Шагнуть через")
115 Адинэснег
 
06.05.14
19:47
кто этого не оценил, видимо не писали и не сопровождали тонны кода
116 vi0
 
06.05.14
20:06
(0) очень большие тексты запросов выношу в функцию

Запрос = Новый Запрос(ПолучитьБольшойТекстЗапроса())

а вот ты покажи свою большую процедуру без подобных выносов
117 ice777
 
06.05.14
20:43
все суета сует. Если у меня текст внутри цикла сильно велик, могу вынести самодостаточные части в отдельные процедуры-функции. Имхо, читабельней.
118 КонецЦикла
 
06.05.14
20:43
(0) Смешались в кучу поне, люди...
Как раз отдельная функция или процедура вида ТекКонтрагент = ПолучитьКонтрагента(...) и т. п. позволяет быстрее понять модуль в целом, даже если используется внимание(!) один раз.
119 Hans
 
06.05.14
21:39
Считаю такой код нормальным. сам пишу так. Где то когда то прочитал в учебнике по программированию, что если процедура больше 30ти строк то что то надо выносить в отдельную процедуру.
120 Hans
 
06.05.14
21:46
Имхо тоже - читабельней.
121 vi0
 
06.05.14
22:04
(119) возможно это про то, что раньше среда разработки была текстовой, с высотой экрана 25 строк. следовательно это требование, чтобы процедура помещалась на экран.
122 xReason
 
06.05.14
22:13
Советую всем умникам, которые говорят, что это плохой код почитать - Чистый код. Создание, анализ и рефакторинг
Автор: Роберт К. Мартин

Даже если процедура вызывается один раз, но это помогает лучше читать код, это оправдано и приветствуется!

Опять же хорошая инкапсуляция всегда делает код гибче
123 ilpar
 
06.05.14
22:27
Хороший код - это читабельный код. Автор (0) не дорос.
124 ilpar
 
06.05.14
22:28
Неужели умные книги читать не учат в университетах?
125 oleg_km
 
06.05.14
22:30
Разбиение большой процедуры на маленькие позволяет также лучше контролировать локальные переменные. В длиной процедуре легко попортить какую-нибудь локальную переменную повторным использованием, тем более при нетипизированности 1С
126 ShoGUN
 
06.05.14
22:45
Самая жуть, что я видел - обработка, написанная так:
В модуле объявлено m переменных модуля.
В модуле написано n процедур без параметров, которые как-то внутри себя меняют вышеуказанные переменные. То есть никакого интерфейса ни у чего нет вообще, весь модуль невозможно разобрать на составные части, "убираешь столб - умирает Пьер Безухов".
А то, что в (0) - нормально, если конечно имена у процедур понятные, а не А1(о, _м).
127 ShoGUN
 
06.05.14
22:48
А, ещё хохма - целая процедура "получить номер без разделителей", которая убирает неразрывные пробелы из длинных номеров-чисел. Кто-то не умел использовать Формат(), ну и наваял. И даже в общий модуль засунул.
128 quest
 
06.05.14
22:49
(0) автор, ты код на джава не читал - на каждый чих - класс, или на С не видел как пишут - на каждые полчиха - свое определение типа. И что удивительно - не видно нигде вопросов - зачем так много функций, а почему все не собрать в одну простыню и читать станет проще?
А вот в 1С - это повод спросить...
Не умеешь читать - не берись, или (как любят тут говоить на форуме ) - "пригласите специалиста"
129 ИС-2
 
naïve
07.05.14
07:01
(0) разработчик молодец - правильно написал.
А автор из (0) проверил ли все места - внешние обработки, базы которые подлючаются через COM, отчеты СКД. Если код используется уже в 2 местах, то надо выносить в отдельные процедуры и функции.
Кроме того, можно сэконить на комментариях
130 ИС-2
 
naïve
07.05.14
07:09
(5) если 2 строчки используеются нескольк раз, то надо.
(53) это если название процедуры не понятное
131 ИС-2
 
naïve
07.05.14
07:13
(101) например, когда тебе надо модифицировать движения по РАУЗ - они формируются в общем модуле, который используется кучей других объектов и вероятность сломать, что либо очень высока. В этом случае лучше прочитать сформированный набор записей и подкорректировать его
132 Chai Nic
 
07.05.14
07:13
(22) "если появляется желание что либо прокомментировать в коде, то этот кусок необходимо выделить в отдельный метод"
Годно. Лучшие комментарии к коду - отсутствие комментариев!
133 Chai Nic
 
07.05.14
07:16
(116) "Запрос = Новый Запрос(ПолучитьБольшойТекстЗапроса()) "
Лучше большие запросы хранить в макетах:
Запрос = Новый Запрос(ПолучитьМакет("НуОченьБольшойТекстЗапроса").ПолучитьТекст())
134 вым
 
07.05.14
07:45
а чтобы окончательно снесло крышу у ТС, 1с внедряет новые механизмы даже в платформу )))

http://v8.1c.ru/o7/201312ref/index.htm
как то - Инструменты рефакторинга

Функции рефакторинга

Функции рефакторинга позволяют сделать код более понятным и удобным для восприятия. Например, вы можете оформить часть кода в виде отдельной процедуры или функции (команда Выделить фрагмент):
135 User_Agronom
 
07.05.14
07:49
(0) Метод последовательной детализации. Выносить блоки в процедуры и функции - хороший стиль. Зря ТС ругает.
(1) (18) - что-то эти два высказывания как-то не сходятся.
136 ДенисЧ
 
07.05.14
07:55
(135) У тебя не сходятся. Значит, ты ещё не дорос.
137 PLUT
 
07.05.14
08:38
(134) Не, для сноса крыши нужен обфусцированный код

http://infostart.ru/public/183177/
138 Mikeware
 
07.05.14
08:41
(132) Код должен быть "самокомментируемым" и в лучшем случае - "самодостаточным"
139 iamnub
 
07.05.14
08:52
(107)
Браво. Забавно, что никто смысла поста не понял.
140 iamnub
 
07.05.14
08:54
А ТС просто не работал в команде. Зачем читать книги, учиться программировать?? Дали мяч - }{уячь - вот и все 1С-ные паттерны.
141 Kyon8
 
07.05.14
09:00
В идеале процедура выполняет только одну задачу однозначно обозначенную в её названии, без побочных эффектов. Тогда при отладке не нужно и заходить в неё обычно. И отлаживать её можно независимо. См. Макконела, да.
142 ДенисЧ
 
07.05.14
09:03
(138) Код никому и ничего не должен
143 kosts
 
07.05.14
09:05
(133) Не нужно так делать. Нужно так, что бы название функции отражала её предназначение:

Запрос = Новый Запрос(ПолучитьТекстЗапросаШапкаДокумента())

или как-то так

Запрос = Новый Запрос(ПолучитьТекстЗапросаПодсчетаОстатков())
144 Separator
 
07.05.14
09:22
ТС, вон из профессии!!!
145 Pasha
 
07.05.14
09:23
(0) Выносить в отдельную процедуру код нужно как раз таки для удобства разбора кода, а не для многоразового использования.
Это стандарты 1С.
146 kosts
 
07.05.14
09:25
(145) И не только 1С.
147 Pasha
 
07.05.14
09:30
Хотя конечно налицо последствия школьного обучения.
Если не изменяет память, то Паскаль именно так и пишется... Одной сплошной простыней. И впитывается в мозг почти намертво. Потом выбить сложно.

Это как с чтением. Обучили читать по слогам, потом кому нужно переучиваются читать слова, ходят на курсы быстрого чтения.
148 Separator
 
07.05.14
09:33
(147) Это хреновые были учителя.
Pascal - образец структурированности, увы, недостижимый разрабами языка 1С.
149 Serg_1960
 
07.05.14
09:35
(0) Я сомневаюсь что есть такой термин.

Все знают про индусский код, но я сильно сомневаюсь что есть монографии по его изучению, методике и определению терминологии.

Т.е, другими словами, я сомневаюсь, что наряду с разработкой основных принципов программирования (и терминологии соответственно), кто-либо серьёзно изучал отклонения от этих  принципов до такой степени, что основным терминам программирования сопоставлял их "анти-термины".

Вот как-то так.

:)
150 Kyon8
 
07.05.14
09:35
(116) Тексты запросов в отдельную функцию это спорно как-то, хотя почти стандарт типовых. По мне так логичнее возвращать готовую выборку. А то текст в одной функции, установка параметров в другой, нарушение абстракции.
151 Любопытная
 
07.05.14
09:36
(147) Не наговаривайте на Паскаль, в нем тоже можно писать отдельные процедуры и функции. И все чудесно структурировалось
152 ДенисЧ
 
07.05.14
09:39
(151) Перепутал человек Паскаль с Бейсиком.
Бывает...
153 Serg_1960
 
07.05.14
09:41
Угу. Как изучал - такие и представления :)

"Садись, два"(с)
154 VladZ
 
07.05.14
09:44
(152) В Бейсике тоже все отлично структурируется.
155 ДенисЧ
 
07.05.14
09:46
(154) Бейсики разные бывают
156 User_Agronom
 
07.05.14
09:52
(136) Корона за нимб не цепляется?
Приведи-ка пример задачи, в которой правильнее всего использовать команду goto (или её аналог).
157 ДенисЧ
 
07.05.14
09:55
(156) А кто ты такой, чтобы я тебе что-то приводил или доказывал?
Не знаешь - сиди, прозябай в невежестве.
158 PLUT
 
07.05.14
09:55
в 1С есть команда

Перейти (Goto)
Синтаксис:
    Перейти ~<Метка>;

Англоязычный синтаксис:
    Goto ~<Метка>;

бейсик йопта
159 PLUT
 
07.05.14
09:56
(156) почитай СП в 1С))

там пример выхода из двойного цикла
160 User_Agronom
 
07.05.14
10:00
(159) Это слабость языка 1С. В нём нет цикла с постусловием. Аналога repeat ... until из Pascal.
Но, тем не менее, это легко решается без команды Перейти.
161 User_Agronom
 
07.05.14
10:01
(157) Аргумент веский. Убедительный. Придётся согласиться.
162 Ndochp
 
07.05.14
10:13
(159) И это не портит читабельность? уж лучше еще один флажок завести, типа "мы все сделали" и поставить  в оба условия цикла в конец " и не мыВсеСделали"
163 kosts
 
07.05.14
10:18
(162) Портит читабельность именно такое применение.
С перейти в таком использовании нагляднее.
Представляю нагромождения с условиями, если нужно выйти например из тройного цикла.
В языке не хватает что то вроде Прервать <Уровень>
164 Separator
 
07.05.14
10:18
165 kosts
 
07.05.14
10:21
(163) Но если что, я не агитирую ни за один способ. Оба применяю там где это лучше подходит.
166 Stepa86
 
07.05.14
10:38
(156) Использование возврата, Продолжить или Прервать в начале метода/тела цикла при нарушении входных условий
167 Chai Nic
 
07.05.14
10:42
(148) "Pascal - образец структурированности"
Ага. Там даже можно процедуру определить внутри области видимости другой процедуры, а не глобально в модуле.
168 Stepa86
 
07.05.14
10:45
Всем тем, кто считает, что методы нужны только для предотвращения дублирования кода - пламенный привет.

Макконнелл выделяет 16 причин, и предотвращение дублирования всего лишь на 3м месте.
169 Separator
 
07.05.14
10:47
(167) А это плохо?
170 fisher
 
07.05.14
10:47
(0) Вот проблемы у людей. Мне в основном приходится матерится из-за прямо противоположного.
171 Asmody
 
07.05.14
10:51
(0) это еще в 1С лямбд нет и функций первого порядка.
можешь себе представить функцию, которая принимает другую функцию в качестве параметра и возвращает третью функцию?
172 fisher
 
07.05.14
10:52
ИМХО, если "кусочек кода" обладает законченной и изолированной функциональностью, то логично вынести его в отдельную функцию даже если он сейчас только один раз используется. Пусть это лишний вызов, но читабельность кода как раз повышается.
173 ДенисЧ
 
07.05.14
10:53
(171) Как представил себе, что это будет использовано в типовых...
Борода резко начала седеть...
174 Stepa86
 
07.05.14
10:54
(171) а я вот где то видел такое в 1С, где передавались куски кода и в выполнить подсовывались. Да и в УП и УТ11 все больше код движется в эту сторону
175 User_Agronom
 
07.05.14
10:55
(166) Не нужно путать команду безусловного перехода и команды управления циклом.
176 Stepa86
 
07.05.14
10:57
(175) а я как раз не путаю, продолжить это гото в конец тела цикла, прервать - гото в первую строчку после цикла, возврат - гото в конец метода
177 fisher
 
07.05.14
10:57
Давненько срачей по поводу гоу ту не было.
178 User_Agronom
 
07.05.14
10:57
(171) Это откуда?
179 Asmody
 
07.05.14
10:58
(174) Выполнить — это ужас-ужас
180 Asmody
 
07.05.14
10:59
(178) откуда что? лямбды и ФПП? из старого доброго функционального программирования.
181 ДенисЧ
 
07.05.14
11:04
(180) Старого - да. Доброго - ой сомневаюсь... :-)
182 User_Agronom
 
07.05.14
11:16
(180) Ни разу не сталкивался и изучал. Сейчас почитал, правда, достаточно специфично.
183 PLUT
 
07.05.14
11:19
(179) через Выполнить() все обормотчики событий в КД2 работают
184 iamnub
 
07.05.14
11:21
(171)
В 1С нет функций высшего порядка, а не первого, адепт.
185 Asmody
 
07.05.14
11:41
(184) поймал на терминологии? ну, ок, возьми с полки пирожок
186 Asmody
 
07.05.14
11:42
187 Чайник Рассела
 
07.05.14
11:56
(186) тю. вот библия каждого уважающего себя программиста
http://cs7009.vk.me/c540105/v540105830/25a04/icOk10-ri1s.jpg
188 quest
 
07.05.14
12:42
(171) а вот этого действительно жутко не хватает. как и макросов. И никакими выполнить/вычилсить не компенсировать
189 Torquader
 
07.05.14
15:49
(188) В 1С и указателей, как таковых, нет.
Есть только псевдообъекты, с заранее заданными наборами свойств.
Если кому интересно - сравните время вызова функций, работы Выполнить и обращения к объектам - сразу станет понятно, что интерпретатор, какой бы он умный не был - быстротой никогда не отличиться.
190 Shurjk
 
07.05.14
15:50
(0) Не согласен с озвученным определением лишних процедур.
191 Chai Nic
 
07.05.14
16:08
(169) А чего хорошего? Если ты делаешь узкоспециализированную процедурку, которая используется лишь в одном месте - логично было бы ограничить её область видимости этим местом. Это как приватные методы класса, только без классов - в чисто процедурном подходе.
192 Chai Nic
 
07.05.14
16:09
+(191) Да, и эта дочерняя процедура видит все переменные родительской процедуры, что позволяет и не заморачиваться с передачей параметров, и не вводить глобальных переменных..
193 vhl
 
07.05.14
16:17
(0) Автор не выделяет блоки кода до тех пор, пока они не будут использоваться повторно? Здравствуйте многостраничные процедуры. Очень удобно. "Хороший тон в программировании".
194 bolobol
 
07.05.14
16:24
(193) Более того! Когда блок используется повторно - он тупо копипастится! Скорость разработки поднимается в разы, ибо даже думу подключать не нужно. Зачем делать красиво там, куда обычно "почитать" не лазят?
195 vhl
 
07.05.14
16:25
И это тоже нормально:

Процедура УстановитьВидимость()
    УстановитьВидимостьКнопкиПодписания();
КонецПроцедуры

особенно, если по опыту знаешь, что в будущем будут еще "хотелки".
196 Torquader
 
07.05.14
16:55
(194) И повторное копирование блока ускоряет исполнение.
P.S. у меня под некоторые языки есть "сборщики кода" - ему пишешь просто и ясно, что нужно сделать, а он уже разворачивает в процедуры и функции, доступные для выбранного языка - то, что кто-то в этом "чуде" разобраться не сможет - это его личные проблемы - можно вверху модуля в комментариях вставить то, что было изначально.
197 quest
 
07.05.14
16:57
(188) спасибо, кэп!
198 Irbis
 
07.05.14
16:58
При этом, быстрые и лёгкие деньги, и даже не всегда маленькие платят именно за гомнокод. А потому чем его бельше тем лучше.
199 Torquader
 
07.05.14
16:59
(198) Ну, тот кто платит, код оценивает только по работоспособности.
200 Irbis
 
07.05.14
17:01
(199) И это правильно. Так зачем делать лучше если можно потом срубить з улучшение? Как в совке, сначало выпускаем форматку на спецболт, потом вносим рацуху на замену стандартным изделием. И всем хорошо.
201 quest
 
07.05.14
17:03
(200) именно поэтому и стало программирование - ремеслом куда ломанулись ПТУшники - тупо рубить бабки
202 Irbis
 
07.05.14
17:06
(201) Ничего в этом плохого нет.
203 StanleyMarsh
 
07.05.14
17:11
(0) давайте назовем это "полиморфизированный инкапсулят"!
204 Ненавижу 1С
 
гуру
07.05.14
17:11
да, напридумывали пустых ссылок вагон и радуются
205 quest
 
07.05.14
17:49
(204) еще null, неопределено придумали... логичненько так получилось.. чисто по одноэсовкси
206 ИС-2
 
naïve
08.05.14
07:59
(0) кстати, тоже мучался с возвратом на прежнее место в коде (откуда вызывалась процедура), пока не нашел для себя кноку alt+F2 и F2. Очень полезные.

Только не хватает стрелочек вперед-назад (как в браузерах), чтобы перейти к прошлому куску кода
207 Chai Nic
 
08.05.14
08:02
(206) А еще есть мечта насчет "обратного отладчика" ) Чтобы вернуться назад в исполнении, с восстановлением контекстов.
208 Михаил 1С
 
08.05.14
08:14
(59) Полностью согласен.

Так легко читать код и легко работать над отдельными частями.
В основной процедуре написано как оглавление из подпроцедур, в итоге сразу видно - что делается. А если надо детально что-то посмотреть - ныряешь в процедуру и смотришь.
209 Михаил 1С
 
08.05.14
08:16
(94) "зачем делать кучу процедур по 3 строчки, которые вызываются 1 раз"
   Ну, это лишнее. Правда, я не читал кода, тебе виднее.
210 Ненавижу 1С
 
гуру
08.05.14
09:27
(205) NULL уже был до них, они просто вынуждены были его использовать
Неопределено - тоже нужно, но в БД хранить нельзя его, только для неинициализированных объектов (nil в паскале)
211 kosts
 
08.05.14
09:46
(207) Об этом я тоже мечтал
(208) +1
(209) Бывает и такое нужно.
212 fisher
 
08.05.14
11:02
В тему. Порадовала функция из БСП:

// Создает массив и помещает в него переданное значение
//
Функция ЗначениеВМассиве(Значение) Экспорт
    
    Массив = Новый Массив;
    Массив.Добавить(Значение);
    
    Возврат Массив;
    
КонецФункции

Причины её появления, в принципе, понятны. Но всё равно прикольно смотрится :)
213 vova1122
 
08.05.14
11:55
я конечно не профи. Но на мой взгляд даже маленькие процедуры/функции на несколько строк которые используются всего один раз - лучше.
Например название функций% УдалитьПробелыВСтроке(МояСтрока)
ПолучитьАдресКонтрагентаПоЕгоКоду(КодКонтрагента)

По названии сразу понятно что она делает и что должна возвращать.
Если вписать эти несколько строк а основном модуле без комментариев, придётся анализировать что происходит в этих строках.
214 fisher
 
08.05.14
12:08
(213) Уточню про "маленькие процедуры/функции на несколько строк которые используются всего один раз". Только если их суть не прозрачна и не читается "в лёт". Функция из (212) при однократном использовании смысла не имеет и только ухудшает читабельность.
215 ELEA26
 
08.05.14
12:20
Если правильно названы процедуры - то даже перескакивать туда не обязательно, чтобы понять что она делает.
216 vova1122
 
08.05.14
12:21
(214) Согласен. На каждый "чих" ненужно писать функции, но и лепить все в одну процедуру тоже неверно.
217 Chai Nic
 
08.05.14
14:05
(214) Вообще для таких целей было бы неплохо иметь inline-функции. Это бы позволило не заморачиваться с передачей информации через параметры. Или сделать как в паскале - внутренние функции.
218 vhl
 
08.05.14
16:50
(216) А в чем проблема собственно? Тебе строк жалко или что?
У меня например есть такое:
Функция ПолучитьМассивИзСтрокиСРазделителем(пСтрока, пРазделитель = ".") Экспорт
    
    Возврат ирПлатформа.ЛксПолучитьМассивИзСтрокиСРазделителем(пСтрока, пРазделитель);
    
КонецФункции

Функция МассивИзСтрокиСРазделителем(пСтрока, пРазделитель = ".") Экспорт
    
    Возврат ирПлатформа.ЛксПолучитьМассивИзСтрокиСРазделителем(пСтрока, пРазделитель);
    
КонецФункции

Функция МассивИзСтрокиСРазделителями(пСтрока, пРазделитель = ".") Экспорт
    
    Возврат ирПлатформа.ЛксПолучитьМассивИзСтрокиСРазделителем(пСтрока, пРазделитель);
    
КонецФункции

Функция ИзСтрокиСРазделителем(пСтрока, пРазделитель = ".") Экспорт
    
    Возврат ирПлатформа.ЛксПолучитьМассивИзСтрокиСРазделителем(пСтрока, пРазделитель);
    
КонецФункции

Функция ИзСтрокиСРазделителями(пСтрока, пРазделитель = ".") Экспорт
    
    Возврат ирПлатформа.ЛксПолучитьМассивИзСтрокиСРазделителем(пСтрока, пРазделитель);
    
КонецФункции

Это называется "синонимы" и тебе просто не надо запоминать как он там пишется - все что не напишешь будет правильно.
219 su_mai
 
08.05.14
18:13
(207) Есть мечта, что бы появилась возможность останавливаться по ошибке содержащей текст
220 ДенисЧ
 
08.05.14
18:17
(219) А что, уже убрали в новых релизах??
221 su_mai
 
08.05.14
18:18
+(219) Наоборот, не останавливаться на ошибках, содержащих текст. Например когда ошибки в попытках маскируются :)

сорри :)
AdBlock убивает бесплатный контент. 1Сергей