|
v7: Загадочный код | ☑ | ||
---|---|---|---|---|
0
ildary
12.07.11
✎
15:19
|
Встретил такое, ковыряя чей-то самодельный отчет:
Покупатели.ДатаОплаты = Дата( '01.01.01' ); хочется узнать - это такой индусский код или в данной строчке есть скрытый смысл, не упомянутый в ЖКК? |
|||
1
ДенисЧ
12.07.11
✎
15:20
|
индусский
|
|||
2
Tatitutu
12.07.11
✎
15:21
|
для таких покупателей, который что-то купили первого января в в начале года - автоматическия скидка 99% (см. правила Торговли)
|
|||
3
Patrio_
O_Muerte 12.07.11
✎
15:24
|
(1)неправильно, правильно говорить индуисцкий
|
|||
4
ildary
12.07.11
✎
15:25
|
(2) я про избыточную типизацию.Я молчу про общую некрасивость кода - мало кто этим заморачивается, но когда встречаю такое как (0) или вот примерно такое:
Если (Найти(Покупатели.Док.Вид(),"Реализация") <> 0) Тогда Отсрочка = Покупатели.Контрагент.Отсрочка; Если Найти(Покупатели.Док.Вид(),"Реализация") <> 0 Тогда ... КонецЕсли; КонецЕсли; я начинаю протирать глаза и думать, что что-то в жизни упустил. |
|||
5
Эльниньо
12.07.11
✎
15:26
|
Это вообще индейский
|
|||
6
Denp
12.07.11
✎
15:26
|
(4) автора кода по жизни постоянно обманывали, вот он и перестраховывается
|
|||
7
filh
12.07.11
✎
15:26
|
а=а-а*2
|
|||
8
Эльниньо
12.07.11
✎
15:27
|
(4) Будешь протирать пока сам не напорешься на сюрпризы движка 7.7.
|
|||
9
ildary
12.07.11
✎
15:32
|
(8) например? Как может вид документа измениться в течении 2 строк? Я не спорю, что в 1С хватает неизведанного, но код, который я привел - тяжело сопровождать. Автор этого дела теперь недоступен и мне проще переписать отчет, чем пытаться понять все его завихрения.
p.s. Вот еще образец: Покупатели.Отгрузка = (-1)*Покупатели.КонДолг; думаю причина в том, что автор этого отчета - ваятель сайтов, выполнявший работу 1Сника по принципу "вчера полы мыл, сегодня за консоль посадили", возможно подобные кодобреды вызваны особенностью языков php и т.п. |
|||
10
dmpl
12.07.11
✎
15:32
|
(4) За время проверки
Отсрочка = Покупатели.Контрагент.Отсрочка; кто-то может изменить Покупатели ;) |
|||
11
andrewks
12.07.11
✎
15:34
|
(0) ты код в ЗиК не изучал?
|
|||
12
Ёпрст
12.07.11
✎
15:37
|
(4) поешь чернички, есть еще РеализацияРозница и РеализацияПрочее , которое попадает под это условие и ты действительно "что-то в жизни упустил"
|
|||
13
Эльниньо
12.07.11
✎
15:37
|
(9) Не помню в каком релизе код:
Болтов = 0; Для х = 1 По 10000 Цикл Если 1 = 1 Тогда Иначе Болтов = Болтов + 1; КонецЕсли; КонецЦикла; Выдавал 6 болтов |
|||
14
Denp
12.07.11
✎
15:39
|
(12) это подпадает только под одно условия из кода?) или все же под оба?
|
|||
15
ildary
12.07.11
✎
15:39
|
(11) всегда отказывался ковырять ЗиК, спасибо добрым людям из ru.1csoft, что в свое время успели рассказать, какая там унутре жуть.
(12) Уважаемый Ёпрст3, я не против проверки через Найти(Вид()), я против вложенной двойной проверки. |
|||
16
Ёпрст
12.07.11
✎
15:40
|
(14) я ниже код не смотрел, речь в (0) же была про "излишнюю типизацию"..
да и, это же не весь код. |
|||
17
Ёпрст
12.07.11
✎
15:40
|
(15) я думал, ты против Найти в коде
:)) |
|||
18
dmpl
12.07.11
✎
15:40
|
(0) Это просто значение по умолчанию. С тем же успехом он мог взять 4.07.1776, но 01.01.01 набирать проще. Скорее всего, автор отчета писал и на отличных от 1С языках программирования, в которых неинициализированная переменная может иметь любое случайное значение.
|
|||
19
Жан Пердежон
12.07.11
✎
15:43
|
8.2 во всех типовых:
|
|||
20
Nordok
12.07.11
✎
15:43
|
(4) И ты обязательно хочешь нам рассказать об этом, нечего, мы уже привыкли, по традиции каждый сезон приходят новички, которые удивляются всякой куйне и постят её с оттенками борьбы за чистоту кода.
|
|||
21
Жан Пердежон
12.07.11
✎
15:43
|
+(19)
Функция ОтделитьРазделителем(Стр, Знач Разделитель, Режим=0) Экспорт ПраваяЧасть = ""; ПозРазделителя = Найти(Стр, Разделитель); ДлинаРазделителя = СтрДлина(Разделитель); Если ПозРазделителя > 0 Тогда ПраваяЧасть = Сред(Стр, ПозРазделителя + ?(Режим=2, 0, ДлинаРазделителя)); Стр = СокрЛП(Лев(Стр, ПозРазделителя - ?(Режим=1, -ДлинаРазделителя + 1, 1))); КонецЕсли; Возврат(ПраваяЧасть); КонецФункции // ОтделитьРазделителем() и код: Пока Истина Цикл ТекущееПоле = ОтделитьРазделителем(СтрокаПоиска, ","); Если ПустаяСтрока(ТекущееПоле) Тогда Прервать; КонецЕсли; СтрокаТаблицы.ПоляПоискаТЧ.Добавить(СокрЛП(ТекущееПоле)); КонецЦикла; |
|||
22
ildary
12.07.11
✎
15:44
|
(20) эээ, а что, нельзя?
|
|||
23
hhhh
12.07.11
✎
15:45
|
а чего я тоже всегда перестраховывался, писал
Если КоличествоСтрок() <= 0 |
|||
24
ildary
12.07.11
✎
15:46
|
(18) что плох вариант в (0) сделать
Покупатели.ДатаОплаты = '01.01.01'; к чему лишняя типизация? |
|||
25
Nordok
12.07.11
✎
15:46
|
(22) Да кто запрещает, просто первый раз было забавно, лет 8 назад, щас уже не то, нету радости :)
|
|||
26
ildary
12.07.11
✎
15:47
|
(25) мне не до забавы, я просил помощи зала :)
|
|||
27
dmpl
12.07.11
✎
15:48
|
(24) Найди на русской раскладке апостроф.
|
|||
28
andrewks
12.07.11
✎
15:49
|
(24) это не самая хренастая хрень, которую можно встретить в коде.
даже скажу так - это почти не хрень. |
|||
29
ildary
12.07.11
✎
15:51
|
(27) зачем искать? за меня телепат ищет, хвала его создателям.
|
|||
30
Jstunner
12.07.11
✎
15:52
|
обычно, борцы за идеальный код за всю жизнь не написали и тысячи строк
|
|||
31
dmpl
12.07.11
✎
15:55
|
(29) Ну и где он нашел? ;)
|
|||
32
ildary
12.07.11
✎
15:57
|
(30) я борец за идеальный код, пишу длинючие обработки, которые даже работают. ЧЯДНТ?
(31) на клавише 'э', а где же еще? :) |
|||
33
_Atilla
12.07.11
✎
15:58
|
(13) Еще один пример
Если СтрДлина(Строка(i)) = 1 Тогда |
|||
34
Jstunner
12.07.11
✎
15:58
|
(32) выложи куда нибудь примерчик, глянем на твой идеальный код
|
|||
35
Ткачев
12.07.11
✎
16:01
|
Из новой Розницы, обработка для ТСД, они вообще проверяют то что делают ?
... Наименование = Строка(Номенклатура); ... ОбработатьКод(Наименование, ...); ... Процедура ОбработатьКод(Номенклатура, ...); ... Наименование = СокрЛП(Номенклатура); Код = Номенклатура.Код Артикул = Номенклатура.Артикул; ... КонецПроцедуры |
|||
36
dmpl
12.07.11
✎
16:02
|
(32) На клавише э в русской раскладке находится буква э. И когда человек жмет на эту клавишу - он ожидает, что получит букву э.
|
|||
37
ildary
12.07.11
✎
16:03
|
(34) могу выложить только тому форумчанину, которого хорошо знаю, незнакомому - извини, не могу. Если очень хочется увидеть - вечером могу пустить через тимвьювер.
(36) мои слова про телепат не были услышаны? |
|||
38
Жан Пердежон
12.07.11
✎
16:04
|
(35) тут всё очевидно,
в (21) уже загадочнее) |
|||
39
ZDenis
12.07.11
✎
16:05
|
(33) так ведь не всегда будут 1 или в чем прикол?
|
|||
40
ildary
12.07.11
✎
16:07
|
(39) могли считать количество разрядов, не?
|
|||
41
Nordok
12.07.11
✎
16:08
|
(37) Правильно, код это как Имя, постоянно связано с душой программиста, через код могут порчу навести.
|
|||
42
Jstunner
12.07.11
✎
16:09
|
(37) мне, по большому счету, твой код не интересен. Но я уверен, что если бы ты написал более менее много кода, то строчка:
Покупатели.ДатаОплаты = Дата( '01.01.01' ); не вызвала бы у тебя хоть сколь нибудь негатива. Хотя бы потому, что она лучше читается. |
|||
43
ZDenis
12.07.11
✎
16:09
|
(40) Каким образом?
|
|||
44
ildary
12.07.11
✎
16:18
|
(43)
до 10 = 1 до 100 = 2 и так далее, правда только для целых чисел. (42) поздравляю с принятием индусской веры. чем меньше лишнего - тем читабельнее. |
|||
45
dmpl
12.07.11
✎
16:18
|
(37) Правильные программисты не пользуются всякими тупыми программами. Это не она, случаем, заменила кавычки на апострофы?
(43) 1 будет только при целом положительном числе от 0 до 9 (если i имеет тип число). |
|||
46
ildary
12.07.11
✎
16:19
|
(45) орефкову это в лицо скажи, умник.
|
|||
47
ZDenis
12.07.11
✎
16:20
|
(45) я это еще в (39) написал
(44) так чем плох код то? |
|||
48
ildary
12.07.11
✎
16:22
|
(47) чем плох - понятия не имею, пост (33) не мой.
|
|||
49
palpetrovich
12.07.11
✎
16:24
|
(13) не верю! :)
|
|||
50
ildary
12.07.11
✎
16:24
|
(49) простите меня, но не могу удержаться, вот еще нашел в том же отчете:
СписДок = СоздатьОбъект("СписокЗначений"); СписДок.УдалитьВсе(); а че, работает ведь, ага? |
|||
51
wladimir90
12.07.11
✎
16:25
|
(0) Индрусский.
|
|||
52
dmpl
12.07.11
✎
16:25
|
(44) Опыта вам не хватает. Хорошие программисты явно указывают тип для того, чтобы быть уверенными в типе и не искать его где-то далеко. А на C/C++ указывают не только тип, но и для всех константных (в данном контексте) переменных добавляют const.
(46) О, обиделся :) Так что там - точно в коде апострофы стоят, или кавычки, все же? |
|||
53
Jstunner
12.07.11
✎
16:27
|
(50) мне вот одно не ясно. Отчет не работает? Или работает медленно? Или выводит ошибочные данные? Да и чего ты в него полез-то ковыряться?
|
|||
54
ildary
12.07.11
✎
16:32
|
(44) в С++ - согласен, не хватает, но мы вроде не на сях пишем. А обидно мне за авторов очень хорошей программы, которую ругает тот, кто ее даже не пробовал.
(53) все работает, только надо доделывать, а для этого сначала разобраться, как он работает. |
|||
55
ildary
12.07.11
✎
16:35
|
(53) v8: Потестите помогалку
вот ветка про развитие программы, почитай как там народ ждет версию для восьмерки |
|||
56
dmpl
12.07.11
✎
16:37
|
(54) А тот, кто пишет на нескольких языках программирования стремится унифицировать приемы написания кода. И это правильно - уже из одной этой строчки видно тип при беглом взгляде, тогда как без Дата() - только приглядевшись.
|
|||
57
Сигизмунд Прокофьеви
12.07.11
✎
16:40
|
а есть конвертер идеального кода в сантиметры?
|
|||
58
palpetrovich
12.07.11
✎
16:40
|
(50)
СписДок.УдалитьВсе(); - это, скорее всего, артефакт от того кода, с которого делался копи/паст, когда СписДок - был на форме |
|||
59
Jstunner
12.07.11
✎
16:58
|
(57) на счет этого - не знаю. Но знаю, что конвертера идеального кода в бонусы и премии точно нет. Почему-то не волнует никого наличие/отсутствие явного приведения.
|
|||
60
Torquader
12.07.11
✎
17:27
|
Просто не все специалисты знают, что в 1С в одинарных кавычках пишется только константа даты.
Например, в JavaScript в одинарных кавычках пишется строка, также как и в двойных - автор кода просто мог об этом забыть. Кроме того, изначально могло быть, что там писалась какая-то другая константа или переменная, а потом автозамена превратила её в "такую интересную конструкцию". Применение автоматической замены к любому коду не только усложняет его читабельность, но и может приводить к нарушению его выполнения. |
|||
61
ZOMI
12.07.11
✎
17:34
|
(0) Ошибками кода можно по существу считать лишь приводящие к существенному падению производительности или неверным результатам.А так это напоминает студентов на лекции ждущих
опечатки препода , чтоб его поправить и потешить свое сами знаете что . |
|||
62
Torquader
12.07.11
✎
17:40
|
(61) Если такая "инициализация" в цикле отчёта по нескольким тысячам строк, то на производительности сказаться может - какими-то долями процента.
P.S. понятно, что параметры принято выносить в начальную часть процедуры. |
|||
63
Nordok
12.07.11
✎
17:48
|
(62) А если бы у бабки *** был, то она была бы дедкой.
|
|||
64
Hans
12.07.11
✎
17:55
|
(0) что тут собственно не то?
|
|||
65
andrewks
12.07.11
✎
19:03
|
(63) окромя народного фольклора, сказать больше нечего? хватит флудить
|
|||
67
Nordok
13.07.11
✎
10:41
|
(65) Сказать "хватит флудить", при этом нафлудив, это зачёт. Да, кроме флуда, в ветке для флуда, мне нечего сказать кроме флуда, как и вам, все сходится.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |