|
Шедевр от 1С | ☑ | ||
---|---|---|---|---|
0
МаксимБел
15.10.12
✎
14:49
|
Если НЕ Сообщать=Ложь тогда
|
|||
48
5 Элемент
15.10.12
✎
15:29
|
(44) в данном случае это не проверка входных данных
|
|||
49
Classic
15.10.12
✎
15:42
|
(47)
Да конечно. Если первоначально ЭКСПОРТНАЯ процедура не содержала функционала "сообщать" и как следствие - не было параметра "сообщать", то и куча вызовов не передавала такой параметр. После добавления функционала при логике " входные параметры задаются юзером, а не прогером" пришлось бы переписывать дофига всего, часть из которого ворзможно - не типовые вещи, а дописки. Т.е. давайте добрая 1С будет прогрить по правилам МаксимаБел, и у вас часть купленных(оплаченных) доработок в определенный момент перестанут работать. |
|||
50
Агент Инфостарта
15.10.12
✎
15:43
|
(28) А кто сказал, что переменные в 1С должны иметь какой-то определённый тип? В 1С типизация данных отсутствует как класс, так же как в php, perl и т.п.
|
|||
51
МаксимБел
15.10.12
✎
15:46
|
(49) Для этого есть следующий механизм:
Процедура МояПроцедура(Параметр1,Параметр2,..., Сообщить = Истина) |
|||
52
МаксимБел
15.10.12
✎
15:46
|
(50)
А давайте садится в автобусы не глядя на его маршрут, и проверять, туда ли мы сели, только после того как автобус тронулся? :) |
|||
53
1Страх
15.10.12
✎
15:47
|
(50) не всегда
|
|||
54
Classic
15.10.12
✎
15:47
|
(51)
Ты не поверишь. В описанной тобой процедуре такой механизм тоже есть. И кстати этот функционал никак не соответствиет твоему "входные параметры задаются юзером, а не прогером" |
|||
55
Агент Инфостарта
15.10.12
✎
15:50
|
(52) Потому чоткие пацаны в 1С проверяют фактический тип переменной конструкциями из первого поста.
|
|||
56
МаксимБел
15.10.12
✎
15:53
|
(54) Что при чем...
В рассматриваемой ситуации вызов процедуры осуществляется прогером. Значит пусть он сам и смотрит, какие параметры, с какими значениями надо передавать. На то он и прогер. И нечего городить нелепые конструкции, тормозящие программу. |
|||
57
МаксимБел
15.10.12
✎
15:54
|
Ситуация напоминает инструкции на американских товарах, когда на каком-нибудь утюге пишут, что он не съедобный.
|
|||
58
Classic
15.10.12
✎
15:55
|
(56)
Еще раз. На момент написания прогером вызова функции подобного параметра не существовало. Каким образом ему надо думать, что передавать? |
|||
59
1Страх
15.10.12
✎
15:58
|
(58) головой
|
|||
60
Aprobator
15.10.12
✎
15:59
|
везет же людям. Явно на работе больше заняться нечем.
|
|||
61
МаксимБел
15.10.12
✎
16:00
|
(58) А что тут думать? Есть процедура, есть параметры. Передавай.
|
|||
62
5 Элемент
15.10.12
✎
16:01
|
(56) Автор этого кода предусмотрел что можно передавать булево и неопределено.
Что не так? |
|||
63
Stepa86
15.10.12
✎
16:02
|
Всем писать код без ошибок, вы же на то и программисты!!!
|
|||
64
МаксимБел
15.10.12
✎
16:02
|
+ (61) Ну добавиться через полгода параметр "Сообщать" с предопределенным значением, например, "Истина". И что? Написанный прогером код работать не перестанет.
|
|||
65
МаксимБел
15.10.12
✎
16:03
|
(62) Бесполезный код, тормозящий программу - вот что не так.
|
|||
66
5 Элемент
15.10.12
✎
16:05
|
(65) А если он не в силах запретить передачу неопределено?
|
|||
67
Serg_1960
15.10.12
✎
16:06
|
МаксимБел, без обид, но ты видать не работал в коллективе программистов больше одного тебя :)
Твоя позиция имеет место быть только для незамысловатых поделок, не претендующие на дальнейшее сопровождение :)) |
|||
68
МаксимБел
15.10.12
✎
16:08
|
(66) Это как?
(67) А сопровождение тут ни при чем. Не вижу проблемы в передаче корректных параметров в процедуру. |
|||
69
Ахиллес
15.10.12
✎
16:09
|
(62) Так можно договориться до того, что каждая функция должна проверять входные данные на все типы. Имхо это бред. Ответственность несёт тот, кто передаёт в функцию параметры. Если вместо Булево передал Неопределено, получи граблями по лбу.
|
|||
70
5 Элемент
15.10.12
✎
16:10
|
(69) здесь нет речи о проверке типа.
здесь поддержка двух типов. |
|||
71
Kashemir
15.10.12
✎
16:12
|
Дежавю. Ну очень понятный код
|
|||
72
Ахиллес
15.10.12
✎
16:12
|
(70) Ну ка, ну ка. Значит можно Сообщить, можно НЕ Сообщить, а можно... продолжай...
|
|||
73
МаксимБел
15.10.12
✎
16:13
|
(70) Поддержкой двух типов это называлось бы, если бы использовались оба типа. Но используется только Булево. Так что это таки именно проверка типа.
|
|||
74
Kashemir
15.10.12
✎
16:18
|
(73) Когда поработаешь на одном хранилище в коллективе из 10 программистов, при разрешенном обновлении конфы не чаще раз в две недели - поймешь что лучше перебдеть (в пределах разумного).
|
|||
75
Classic
15.10.12
✎
16:20
|
(64)
Как "добавить параметр с предопределенным значением" согласуется с "входные параметры задаются юзером, а не прогером" |
|||
76
Classic
15.10.12
✎
16:22
|
(67)
Да похоже на то. Плюс добрался до открытого кода, который можно пообсирать. Не видел ни одного програмера, который всегда рефакторил код после минимальных изменений |
|||
77
Ахиллес
15.10.12
✎
16:23
|
(74) Зачем? Ты написал Функцию. Она принимает тип Булево. Если кто то туда передаёт НЕОПРЕДЕЛЕНО или любой другой тип, то это лично его половые трудности.
|
|||
78
Aprobator
15.10.12
✎
16:24
|
(77) хорошо сказано ) Сразу фикса видно.
|
|||
79
МаксимБел
15.10.12
✎
16:24
|
(75) Не надо вырывать фразы из контекста. Если бы процедура получала параметр от юзера, тогда проверка корректности была бы хорошим тоном. Но в данном случае юзер ни при чем.
|
|||
80
5 Элемент
15.10.12
✎
16:26
|
(72) я не телепат, ты и продолжай
|
|||
81
МаксимБел
15.10.12
✎
16:27
|
(77) Подписываюсь под каждым словом.
Проверять чьи-то руки на корявость можно до бесконечности. Можно допроверятся до того, что 99% кода будет состоять из проверок и только 1% будет эффективным. Лично я не хочу платить за программу, которая тратит кучу процессорного времени на проверку самой себя, а не решение моей задачи. |
|||
82
Mort
15.10.12
✎
16:28
|
Какие-то мелочи программистов возбуждают почему-то. Гораздо прикольнее в типовых разного рода глупости на уровне логики построения, вроде возврата компонент ФИО массивом с тремя элементами.
|
|||
83
Kashemir
15.10.12
✎
16:29
|
(77) Потому что данная функция могла существовать ранее без данного параметра. И чтобы не искать все места ее использования (в том числе внешние), проще обеспечить совместить со старым релизом.
|
|||
84
Ахиллес
15.10.12
✎
16:31
|
(83) Старые места вызова не могут вызвать несуществующий параметр. Сообщать=Ложь или Сообщать=Истина было бы достаточно.
|
|||
85
МаксимБел
15.10.12
✎
16:31
|
(83) А можно конкретный пример, когда данная функция будет работать не корректно, если в нее не передается необязательный параметр, имеющий значение по умолчанию?
|
|||
86
5 Элемент
15.10.12
✎
16:32
|
(83) неправильный пример, щас они тебя заклюют
|
|||
87
Ахиллес
15.10.12
✎
16:32
|
(85) Да он гонит.
|
|||
88
KoDD
15.10.12
✎
16:33
|
(0) в какой конфе такое?
|
|||
89
МаксимБел
15.10.12
✎
16:34
|
(88) Бухгалтерия 8
|
|||
90
Classic
15.10.12
✎
16:34
|
(77)
Почитай выше. Это вполне могло быть для совместимости с РАНЕЕ НАПИСАННЫМ функционалом |
|||
91
Kashemir
15.10.12
✎
16:35
|
(85) Придумать пример - да ради бога ?
Было Процедура ЗарегистрироватьИзменения(Текст) РегистрацияИзменения(Текст); КонецПроцедуры Стало Процедура ЗарегистрироватьИзменения(Текст, Сообщить = Неопределено) Если Сообщить = Ложь Тогда Сообщить(текст); РегистрацияИзменения(Текст); КонецПроцедуры |
|||
92
KoDD
15.10.12
✎
16:35
|
(89) релиз какой?
|
|||
93
Kashemir
15.10.12
✎
16:35
|
+(91) Криво накидал - но идея думаю и так понятна
|
|||
94
Ахиллес
15.10.12
✎
16:36
|
(91) Болеешь?
Было Процедура ЗарегистрироватьИзменения(Текст) РегистрацияИзменения(Текст); КонецПроцедуры Стало Процедура ЗарегистрироватьИзменения(Текст, Сообщить = Ложь ) Если Сообщить = Ложь Тогда Сообщить(текст); РегистрацияИзменения(Текст); КонецПроцедуры |
|||
95
Kashemir
15.10.12
✎
16:38
|
(94) Тебе идея неясна?
|
|||
96
Ахиллес
15.10.12
✎
16:38
|
(90) Ну если ранее написанный функционал такая же бредятина, то конечно приходится думать о совместимости одного бреда с другим :-)
|
|||
97
Ахиллес
15.10.12
✎
16:40
|
(95) Сообщить никогда в старых вызовах не может принять значение НЕОПРЕДЕЛЕНО, а в новом функционале оно просто НЕ НУЖНО ибо ничего не делает.
|
|||
98
Classic
15.10.12
✎
16:54
|
(96)
Народ, я понял. Все написанное не вами - бредятина. Потому даже задумываться о совместимости написанного вами и невами - бред. Знакомо в чем-то. Мне дали задание - оно работает. А то, что в других местах потом полезли косяки - то не моя проблема. |
|||
99
Kashemir
15.10.12
✎
16:55
|
(98) К сожалению это нормальное явление для самоуверенных, но лишенных серьезного опыта программистов. Со временем обычно проходит.
|
|||
100
Ахиллес
15.10.12
✎
16:55
|
(98) "Если бы все люди заботились только о благополучии других, то ещё скорее передрались бы друг с другом." Й. Швейк.
Читайте классику. Там умные мысли попадаются. |
|||
101
МаксимБел
15.10.12
✎
16:57
|
(92) 1.6.39.9
|
|||
102
Ахиллес
15.10.12
✎
16:57
|
Не надо пытаться насильно осчастливить всех людей. Они за это спасибо не скажут. А скорее побьют.
|
|||
103
Classic
15.10.12
✎
16:57
|
(100)
Ясно (99) У некоторых не проходит. |
|||
104
Serg_1960
15.10.12
✎
16:58
|
Интереса ради, посмотрел на вызовы "популярной" в УПП функции УниверсальныеМеханизмы.НапечататьДокумент()... и смело могу утверждать что раньше в ней было четыре параметра, а сейчас - шесть.
Самый "лаконичный" вызов - УниверсальныеМеханизмы.НапечататьДокумент(ПечатьЦенника(), , , "Ценники") :) И хотя везде указывается первый параметр, первые строчки функции не считаю "тупой" перестраховкой: Функция НапечататьДокумент(ЧечДокумент,...) Экспорт Если ПечДокумент = Неопределено тогда Возврат Неопределено; КонецЕсли; |
|||
105
Serg_1960
15.10.12
✎
17:00
|
(104) Сорри, опечатка: "ЧечДокумент" --> "ПечДокумент"
|
|||
106
Ахиллес
15.10.12
✎
17:03
|
(104) Не подходит пример. Там тип Неопределено обрабатывается в теле функции.
|
|||
107
KoDD
15.10.12
✎
17:10
|
(101) 1.6.39.9 ? нее, не слышал
|
|||
108
Mort
15.10.12
✎
17:10
|
(104) В данном случае это тупая перестраховка.
|
|||
109
МаксимБел
15.10.12
✎
17:10
|
(98) Не так.
Если полезли косяки из-за моего кода, тогда это моя проблема. А на нет, и суда нет. (104) Может и не тупая, но лишняя. Не хотят юзеры понимать, почему программа медленно работает из-за каких-то там проверок, которые к ним никак не относятся. |
|||
110
Mort
15.10.12
✎
17:12
|
+(108) Вместо того чтобы вызвать православное исключение, функция утаивает косяк в вызове функции, наивно надеясь, что пользователь функции (программист её вызывающий), который не потрудился обеспечить тип параметра, потрудится над обработкой возвращаемого значения.
|
|||
111
Serg_1960
15.10.12
✎
17:13
|
(106) Не согласен. Это - того-же самого плана, о чём идет спор. Не самый оптимальный исполняемый код, потому что "это" не столько проверка входных параметров, как оптимизация "написания" и "согласование" алгоритмов системы.
|
|||
112
Mort
15.10.12
✎
17:14
|
+(110) Такая плюшка (104) не даёт _ничего_ кроме усложнения отладки. Никакой "подстраховки".
|
|||
113
Ахиллес
15.10.12
✎
17:14
|
(111) ПечДокумент теоретически может быть типом Неопределено, а Сообщать даже теоретически всегда только Булево будет.
|
|||
114
Serg_1960
15.10.12
✎
17:15
|
(108) Нет и ещё раз - нет. В качестве первого параметра часто используется возвращаемое значение функции получения печатной формы. А эта функция "штатно" или возвращает печатную форму, или - "Неопределено" если возникли какие-либо проблемы.
|
|||
115
МаксимБел
15.10.12
✎
17:16
|
+(111) Подобные проверки порождают еще большие косяки. Пример: сторонний прогер вызвал процедуру с неверными параметрами, а она взяла и отработала без ошибок. После этого тот же прогер юзает копипаст и плодит косячные вызовы еще 100500 раз. А третий прогер начинает юзать его косяки, довешивая еще и свои. Ну и так далее...
|
|||
116
Serg_1960
15.10.12
✎
17:19
|
(115) Стоп, остановись. Так можно договорится до абсурда :)
|
|||
117
Kashemir
15.10.12
✎
17:21
|
(115) С чего ты взял что это вообще ошибка ?
|
|||
118
Mort
15.10.12
✎
17:22
|
(114) Ну раз функция возвращает неопределено, то и перед тем как пихать результат в другую функцию параметром и нужно его проверять. Зачем функции знать, что её параметр может быть результатом какой-то функции, которая что-то там может вернуть.
Правило черного ящика, короче. |
|||
119
Mort
15.10.12
✎
17:24
|
+(118) Короче на все типы, функция свои параметры один хрен не проверит (А если туда послать число, что будет?). А проверять на определенный, который может вернуться другой функцией - это нарушать правило черного ящика. Т.е. здравого смысла.
|
|||
120
Mort
15.10.12
✎
17:25
|
+(119) Впрочем, там могла быть проверка Если ТипЗнч(..) = Тип("табличныйДокумент"), но это не меняет логики.
|
|||
121
МаксимБел
15.10.12
✎
17:29
|
(117) Это не ошибка, это лишний код, который тупит программу и расслабляет сторонних доработчиков, которые привыкают к тому, что не надо следить за тем, что куда передаешь.
|
|||
122
МаксимБел
15.10.12
✎
17:32
|
+(117) Контролить юзеров - надо, контролить прогеров - вредно. Прогер должен сам смотреть что и куда передает.
|
|||
123
Kashemir
15.10.12
✎
17:33
|
(121) Если это не ошибка, то причем тут косячный код (115) ?
|
|||
124
Kashemir
15.10.12
✎
17:36
|
(122) Это хорошо когда сидишь и сам ковыряешь свою конфу. В большом коллективе с гиговыми цфниками, террабайтовыми базами и сотнями распределенок, из-за такой "суперважнейшей" проблемы уровня "запятой" тебе придется писать объяснительные и скорее всего еще и самому обновлять все базы, либо же напрягать отношения с админами.
Ты уверен, что так уж важна лишняя перестраховочная проверка на тип ? |
|||
125
Serg_1960
15.10.12
✎
17:38
|
Хмм... В типовых алгоритмах часто используется цепочки вызовов. Ну, например, типа "получить печатную форму" -> "напечатать". В УПП - 375 раз :)
Не вижу смысла "усложнять" алгоритмы проверкой работы каждого звена такого рода цепочки вызовов - легче пропустить "ошибки" через все звенья и оценить только итог работы. |
|||
126
МаксимБел
15.10.12
✎
17:47
|
(125) Ага. А потом полгода искать в каком звене баг случился.
|
|||
127
Kashemir
15.10.12
✎
17:51
|
(126) Важно, чтобы работа конечных пользователей не остановилась и уже во-вторую очередь, желательно чтобы для большинства остались незаметным твои мелкие дефекты кодоводства либо же были терпимы к отложенному устаранению.
|
|||
128
МаксимБел
15.10.12
✎
17:55
|
(123) Это не ошибка. Это код который приучает прогеров плодить потенциальные ошибки, которые со временем могут вылезти большим боком. Можно сравнить с термином "technical debt", если знаете такой.
(122) Вот и представьте, сколько лишних проверок выполниться в гиговых цфниках, с террабайтовыми базами, и сколько процессорного времени они съедят. А всё только потому, что одни прогеры не следят за передаваемыми параметрами, а другие это поощряют. |
|||
129
Serg_1960
15.10.12
✎
18:00
|
PS: постепенно разговор ушел несколько в другую плоскость, где "шедевры 1С" уже не кажутся столь страшными :)
|
|||
130
Kashemir
15.10.12
✎
18:00
|
(128) Программист 1С не системный программист, чтобы дорожить каждым процессорным тактом. Доля таких проверок в совокупности ничтожно мала, а польза неоценима. Попробуй объяснить сотне пользователей какого они должны остаться после работы на час вместо того чтобы потратить в течении дня на пару секунд больше чем без них.
|
|||
131
Kashemir
15.10.12
✎
18:03
|
+(130) Ко всему можешь добавить звонки в 3 часа ночи "не работает программа, стоит хренова туча машин в ожидании погрузки/разгрузки" - ты вовсе не ценишь ни свой сон ни благополучие пользователей, пытаясь сэкономить пару тактов.
|
|||
132
МаксимБел
15.10.12
✎
18:04
|
(127) Недавно столкнулся с таким подходом в Конвертации данных, когда итог выполнения кода проверялся на конечном этапе через Попытка - Исключение и на экран выводилось абстрактное "Ошибка чтения данных". Грузился файл в 150 мб. Почти целый день был убит на поиск ошибки.
|
|||
133
Kashemir
15.10.12
✎
18:06
|
(132) Время убил ты, пользователи не пострадали - не вижу ничего критичного.
|
|||
134
Ахиллес
15.10.12
✎
18:08
|
(133) А если моё время стоит дороже чем время целого отдела операторов?
|
|||
135
МаксимБел
15.10.12
✎
18:08
|
(130) Такие ошибки очень быстро обнаруживаются и исправляются. И в дальнейшем программа работает быстро и без проблем, достаточно один раз отладить. А с подходом как в (127) ошибка может вылезти через год, в, казалось бы, вполне отлаженной программе. И один только поиск ошибки может парализовать работу организации не на час, а на день.
|
|||
136
Kashemir
15.10.12
✎
18:20
|
(130) Обнаруживаются то быстро, а вот накатки исправлений для больших баз - сильно заблуждаешся и зря игнорируешь (130)(131)
|
|||
137
Kashemir
15.10.12
✎
18:20
|
+(136) Если оперативная работа с этой ошибкой шла больше года - с какой стати вдруг она парализуется сейчас ? Если же неоперативная - то ничего страшного - подождет.
|
|||
138
Kashemir
15.10.12
✎
18:24
|
(134) Значит у тебя мелкая контора
|
|||
139
Kashemir
15.10.12
✎
18:27
|
+(138) Кстати целому отделу оператору будет пофиг сколько ты получаешь, если они лишний час должны задержаться на работе из-за твоей принципиальности. И застоявшейся фуре со скоропортящимся товаром будет тоже пофиг твое время и его цена.
|
|||
140
МаксимБел
15.10.12
✎
18:32
|
(138) Я вот не пойму, почему вы по умолчанию считаете, что с моим подходом ошибок будет больше, а находится и исправляться они будут дольше и обязательно во внерабочее время, а с вашим подходом всё будет как сказке?
На мой взгляд, мой подход позволит ошибкам обнаружится еще в процессе отладки. |
|||
141
Kashemir
15.10.12
✎
18:38
|
(140) В своих суждения руководствуюсь своим опытом без отклонения в крайности. Программисты 1С - сфера обслуживания пользователей. И чем незаметнее наш труд для пользователей - тем эффективнее мы работаем.
|
|||
142
Злопчинский
15.10.12
✎
18:40
|
#define false true
счастливой отладки! |
|||
143
Ахиллес
15.10.12
✎
18:40
|
>+(136) Если оперативная работа с этой ошибкой шла больше года - с какой стати вдруг она парализуется сейчас ?
Будешь это главбуху объяснять, почему она целый квартал нормально работала, а в день сдачи НДСа у ней нихрена не работает эта ваша одинэска :-) |
|||
144
Kashemir
15.10.12
✎
18:42
|
(143) Если бухгалтер работает в режиме студента - это его проблемы. Кроме того даже если так случилось цена проблемы для фирмы вряд ли будет заметна.
|
|||
145
Ахиллес
15.10.12
✎
18:42
|
(142) Каждую программу можно немножечко улучшить.
#define true (Math.random() > 0.5) :-) |
|||
146
olo_lo1
15.10.12
✎
20:43
|
(0) а мне понравилось. приму на вооружение!
|
|||
147
5 Элемент
15.10.12
✎
21:07
|
(100)(69) почитай Макконела, тоже кстати классика.
У него не вызывает такого отторжения защитное программирование. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |