|
OFF: Ну очень понятный код | ☑ | ||
---|---|---|---|---|
0
OpKc
27.09.12
✎
07:38
|
Сейчас разбирал чужую обработку и нашёл такое условие:
Если НЕ НеФиксироватьВРегистре = Истина Тогда Так и не смог понять, зачем... Поделитесь перлами, которые встречали. Хоть настроение поднимется немного. |
|||
30
dmpl
27.09.12
✎
08:26
|
(0) А если НеФиксироватьВРегистре имеет не булевый тип?
|
|||
31
ilou
27.09.12
✎
08:27
|
(0) Ты сам то хоть умеешь кодить?
|
|||
32
ilou
27.09.12
✎
08:28
|
может у человека НеФиксироватьВРегистре принимает значения Булево и например перечисление или еще какой-нибудь тип был ранее ты откуда знаешь или у него на будущее задел был.
|
|||
33
vovus
27.09.12
✎
08:32
|
(22) че тут разбираться? раз уж
Если НЕ НеФиксироватьВРегистре = Истина Тогда не пытается привести переменную к типу булево, значит работает как Если НЕ (НеФиксироватьВРегистре = Истина) Тогда |
|||
34
xReason
27.09.12
✎
08:35
|
(27) Зачетно отжОг
|
|||
35
Feint
27.09.12
✎
08:37
|
(27) :-D
|
|||
36
rs_trade
27.09.12
✎
08:40
|
просто клюшечник писал. вот и все.
|
|||
37
kosts
27.09.12
✎
08:43
|
Я бы в случаях когда переменная может быть неопределенной явно бы и проверял.
Если НеФиксироватьВРегистре = неопределено и НЕ НеФиксироватьВРегистре Тогда |
|||
38
rs_trade
27.09.12
✎
08:44
|
развели тут дебаты о тайном смысле. может он и есть, но так не надо все равно делать. не надо элементарные вещи прятать в неоднозначные конструкции.
|
|||
39
dmpl
27.09.12
✎
08:45
|
Кстати, еще в некоторых языках не допускаются конструкции типа
т.е. без явного оператора сравнения. А потому явное сравнение с Истина однозначно повышает читабельность кода и формирует у программиста унифицированные приемы написания кода на разных языках программирования. (37) :) Ты в курсе, что если НеФиксироватьВРегистре будет не равно Неопределено (т.е. имеет тип Булево, например), то вторую часть выражения 1С даже анализировать не будет? Потому как условие И однозначно даст Ложь? |
|||
40
DrShad
27.09.12
✎
08:59
|
короче ТС хотел поглумиться, а вышло что самого зачмырили :)))
|
|||
41
kosts
27.09.12
✎
09:00
|
(39) > Ты в курсе, что если НеФиксироватьВРегистре будет не равно Неопределено (т.е. имеет тип Булево, например), то вторую часть выражения 1С даже анализировать не будет? Потому как условие И однозначно даст Ложь?
Естественно в курсе, я же не переписывал фрагмент на аналогичный, а пример привел... |
|||
42
DJ Anthon
27.09.12
✎
09:02
|
какие нафик скобки? оператор НЕ имеет наивысший приоритет во всех языках, чего тут читать? вон в шахматной ветке - вот там трудночитабельный код, а это фигня, камрады...
|
|||
43
dmpl
27.09.12
✎
09:05
|
(41) Ну и зачем тогда вторая часть? В ней нет никакого смысла. Ведь если НеФиксироватьВРегистре = неопределено, то вторая часть выдаст ошибку, ибо тип не Булево. И чем этот пример лучше (даже если = исправить на <>), чем в (0)? Ты использовал 1 явное сравнение и 1 неявное, тогда как в (0) - всего лишь 1 явное.
|
|||
44
kosts
27.09.12
✎
09:18
|
(43) В случаях когда переменная может быть неопределенной делаю явное сравнение и не полагаюсь не неявное преобразование.
Далее в зависимости от ситуации, смотря в каком случае нужно попасть в тело условия. Если Переменная <> Неопределено и Переменная = Истина Тогда Если Переменная = Неопределено или Переменная = Ложь Тогда Если Переменная = Неопределено или Переменная = Истина Тогда Выбирай на вкус. |
|||
45
OpKc
27.09.12
✎
09:32
|
(19) это реквизит обработки с типом Булево
|
|||
46
ХочуСказать
27.09.12
✎
09:34
|
НеФиксироватьВРегистре = Неопределено;
Если НЕ НеФиксироватьВРегистре = Истина Тогда автора на кол, как быдлокодера |
|||
47
dmpl
27.09.12
✎
09:36
|
(42) Ну, например, в разных языках приоритеты операций сравнения и логических операций разные. Например, в Паскале логические операции имеют более высокий приоритет, чем операции сравнения, а в 1С - менее высокий. Скобки же позволяют однозначно прочитать выражение не зная таких подробностей о языке.
(44) Тогда уж надо
чтобы совсем по фен-шую. |
|||
48
Shurjk
27.09.12
✎
09:37
|
(0) Вот за что я больше всего не люблю программистов, это за непомерное желане всегда охаять то что сделали другие.
Мало ли как он это делал, сначала написал потом в процессе отладки вносил исправления и т.д. к тому же ничего особо криминального в этом коде не вижу, вот что реально доставляет это когда пишут запрос не представляя как они работают, вот такую хню точно запаришься отлаживать и искать там ошибки. |
|||
49
Maxus43
27.09.12
✎
09:40
|
все перлы там http://govnokod.ru/1c
только чото сайт щас не доступен у меня |
|||
50
be-may
27.09.12
✎
09:40
|
(0) 99 % , что писал переученный семерочник, начинающий в восьмерке "шарашить" :)
|
|||
51
Fish
27.09.12
✎
09:41
|
(49) Наверное прикрыли за розжиг и оскорбление чувств быдлокодеров :)))
|
|||
52
DJ Anthon
27.09.12
✎
09:43
|
(47) да, это И ИЛИ и сравнение, согласен. но уж никак не НЕ! еще же есть и Complete boolean eval и вычисление справа налево.
|
|||
53
kosts
27.09.12
✎
09:46
|
(47) Нет универсального средства, то так, то так, то эдак...
|
|||
54
Shurjk
27.09.12
✎
09:46
|
(47) Если ТипЗнч(Переменная) = Тип("Булево") И Переменная = Истина Тогда - не рабочая конструкция. Если переменная не булево выдаст ошибку.
|
|||
55
OpKc
27.09.12
✎
09:47
|
(50) да, видимо. я с семёркой знаком плохо, не сообразил сразу.
|
|||
56
dmpl
27.09.12
✎
09:48
|
(52) В 1С операция сравнения (=) имеет более высокий приоритет, чем НЕ. Собственно, поэтому код из (0) и работает.
(54) Не выдаст. То, что после И, вообще не будет вычисляться, ибо итак уже известно, что будет Ложь. |
|||
57
ХочуСказать
27.09.12
✎
09:50
|
кстати за зачем народ в запросах пишет
ВЫБРАТЬ Т.ССЫЛКА ИЗ Т ГДЕ Т.Проведен = ИСТИНА И Т.ПометкаУдаления = Ложь Зачем? почем не прогд ГДЕ Т.Проведен И НЕ Т.ПометкаУдаления ? |
|||
58
vde69
27.09.12
✎
09:53
|
(52) выполни
результат Без скобок 1 Скобки 1 Ошибка -------------------------------------- в 1с оператор НЕ имеет более низкий приоритет чем операторы сравнения!!! |
|||
59
Shurjk
27.09.12
✎
09:54
|
(56) Будет - ты попробуй.
|
|||
60
dmpl
27.09.12
✎
09:57
|
(59) Пробовал - работает. И с Неопределено, и с числом, и с Булево.
|
|||
61
OpKc
27.09.12
✎
09:58
|
(0) Повторю (45), НеФиксироватьВРегистре - реквизит обработки типа Булево. Сразу не написал, моя оплошность.
|
|||
62
OpKc
27.09.12
✎
09:58
|
+(61) но ветку почитать интересно :)
|
|||
63
Fish
27.09.12
✎
10:01
|
(54) Вполне рабочая конструкция.
|
|||
64
Кирпич
27.09.12
✎
10:01
|
(0) Надо было так человеку написать, вот и написал. Не считай себя самым умным. Ты не самый умный.
|
|||
65
ssh2006
27.09.12
✎
10:03
|
(54) даже без проверки на тип значения оно не будет выдавать ошибку
|
|||
66
Shurjk
27.09.12
✎
10:09
|
(63) А ну да будет работать - но проверка но не от того что провекра на булево стоит просто само переменная = истина и без него работает.
|
|||
67
Оболтус
27.09.12
✎
10:14
|
(5)Но это вполне может дать прирост производительности.
Если документы создаются редко, о остаток нужно читать часто. Чтение из справочника быстрее, чем расчет остатка из регистра. |
|||
68
NcSteel
27.09.12
✎
10:20
|
Сборище графоманов с явно выраженными Grammar nazi склонностями.
|
|||
69
tertva_1C
27.09.12
✎
10:21
|
#9899: Обфускация тирьямпампацией
20 сентября 2012, 08:15 рейтинг: 1171 Когда у программистов бывает хорошее настроение, они творят. И часто это настроение находит своё непосредственное выражение в самом родном и близком — в программном коде. Вот что я обнаружил в листинге своего одногруппника: procedure TFamPapam.BamBamClick(Sender: TObject); var pam,pam_,tararam,tiryam_pam_pam:real; tryam:integer; begin GetParam;tryam:=0;tararam:=0.0001; repeat inc(tryam); pam:=papam*Param(pum,pum_)+pum; pam_:=-1*(papam_*Param_(pum,pum_)-pum_); tiryam_pam_pam:=sqrt(sqr(pam-pum)+sqr(pam_-pum_)); pum:=pam;pum_:=pam_; until tiryam_pam_pam<tararam; end; И оно работает. |
|||
70
dmpl
27.09.12
✎
10:22
|
(66) Ну дык это был пример. Для данной ветки будет, соответственно,
|
|||
71
AlexITGround
27.09.12
✎
10:25
|
(69) Я так люблю мисту именно из-за этого, спасибо тебе, добрый человек, все утро пытаюсь проснуться и сделать чего-либо))
|
|||
72
Ненавижу 1С
гуру
27.09.12
✎
10:26
|
почему такой запрос корректен
ВЫБРАТЬ 1 КАК Поле1 ГДЕ (НЕОПРЕДЕЛЕНО ЕСТЬ NULL)=ЛОЖЬ а такой нет ВЫБРАТЬ 1 КАК Поле1 ГДЕ (НЕОПРЕДЕЛЕНО=NULL)=ЛОЖЬ сразу скажу для крикунов: сравнивать с NULL синтаксически можно, просто результат отрицательный всегда |
|||
73
dmpl
27.09.12
✎
10:29
|
(72) NULL - он один такой! Поэтому сравнение на равенство всегда дает отрицательный результат :)
|
|||
74
ssh2006
27.09.12
✎
10:31
|
(72) > просто результат отрицательный всегда
Так прописано в СП |
|||
75
Ненавижу 1С
гуру
27.09.12
✎
10:32
|
я спрашиваю почему синтаксис не корректен во втором случае
|
|||
76
Deon
27.09.12
✎
10:33
|
(75) А похоже Null тут и ни при чем
Так тоже матерится: ВЫБРАТЬ 1 КАК Поле1 ГДЕ (1=2)=ложь |
|||
77
zaic
27.09.12
✎
10:34
|
КЗК Альфа здорово подходит для защиты работающих текстов от критики, имхо.
|
|||
78
Ненавижу 1С
гуру
27.09.12
✎
10:35
|
(76) вот, а почему? почему операнд ЕСТЬ NULL допустим, а операнд = нет
|
|||
79
Оболтус
27.09.12
✎
10:35
|
(72)-(76)Извращенцы чертовы.
|
|||
80
ssh2006
27.09.12
✎
10:35
|
(76)
ЫБРАТЬ 1 КАК Поле1 ГДЕ (Истина = истина) = истина |
|||
81
Classic
27.09.12
✎
10:36
|
(76)
Похоже в скуле логические операции имеют не булевский тип :) |
|||
82
Deon
27.09.12
✎
10:37
|
(80) А ведь тоже нифига не работает )
|
|||
83
Ненавижу 1С
гуру
27.09.12
✎
10:37
|
(81) скуль тут не причем, это проблемы парсера запроса 1С
|
|||
84
Classic
27.09.12
✎
10:37
|
(80)
:) ЫБРАТЬ - срабатывает :) |
|||
85
Classic
27.09.12
✎
10:37
|
(82)
Там не ВЫБРАТЬ, там ЫБРАТЬ |
|||
86
dmpl
27.09.12
✎
10:38
|
(75) А с чего ты взял, что в скобках операция сравнения, а не присваивания? ;)
|
|||
87
Deon
27.09.12
✎
10:38
|
(85) А никак не сработает )
|
|||
88
Shurjk
27.09.12
✎
10:38
|
(77) А как же поддержка и все такое, тогда тебе последователи еще большее спасибо скажут.
|
|||
89
Rovan
гуру
27.09.12
✎
10:38
|
(17) я тоже так пишу как в (0) иногда
"...Если НеФиксироватьВРегистре = Ложь Тогда..." а если НеФиксироватьВРегистре вдруг окажется = Неопределено или NULL или 0... |
|||
90
Deon
27.09.12
✎
10:39
|
(86) кстати, а в запросах бывает присваивание?
|
|||
91
VladZ
27.09.12
✎
10:40
|
Если запрос.Выполнить(ТекстЗапроса) = 0 Тогда
сообщить("Увы!"); КонецЕсли; Код понятен. Но автору код с удовольствием бы дал по башке... |
|||
92
VladZ
27.09.12
✎
10:40
|
*Автору кода
|
|||
93
Deon
27.09.12
✎
10:40
|
Писать надо так:
ПеременнаяТипаБулевоХранящаяИстину = Истина; Если НЕ НеФиксироватьВРегистре = ПеременнаяТипаБулевоХранящаяИстину Тогда ... |
|||
94
dmpl
27.09.12
✎
10:40
|
(90) Ну вот поэтому и говорит "Мужик, ты чо? В запросах присваивания не бывает!" :)
|
|||
95
Ненавижу 1С
гуру
27.09.12
✎
10:41
|
(90) бывает, но не в этих ))
|
|||
96
Ненавижу 1С
гуру
27.09.12
✎
10:41
|
(94) какое присваивание, там везде сравнение
|
|||
97
Deon
27.09.12
✎
10:41
|
(95) Не в этих, это не в 1С-овских?
|
|||
98
DrShad
27.09.12
✎
10:42
|
(0) это весь понятный тебе код что ты нашел?
|
|||
99
Deon
27.09.12
✎
10:44
|
Кстати, скорее всего НеФиксироватьВРегистре это реквизит обработки и он жестко типизирован как булево, так что можно смело давать добро ТС на разбитие головы автору обработки.
|
|||
100
Ненавижу 1С
гуру
27.09.12
✎
10:45
|
сотко
|
|||
101
Ненавижу 1С
гуру
27.09.12
✎
10:45
|
(97) ага
|
|||
102
Deon
27.09.12
✎
10:45
|
Кстати, а почему так не фурычит:
ВЫБРАТЬ 1 КАК Поле1 ГДЕ НЕ (NULL = НЕОПРЕДЕЛЕНО) |
|||
103
dmpl
27.09.12
✎
10:46
|
(96) Вот он тебе и говорит, что нефиг присваивать ;) 1С ведь думает, что ты присвоить хочешь. Ведь нужное сравнение ты можешь вполне реализовать по-другому.
|
|||
104
Chin
27.09.12
✎
10:47
|
(12) Если оно НЕОПРЕДЕЛЕНО, то оно вообще работать не будет... Так что автор как минимум был уверен что оно не неопределено... А в общем соглашусь с (4)... Иногда помогает...
|
|||
105
Ненавижу 1С
гуру
27.09.12
✎
10:47
|
(102) фурычит, не ври
|
|||
106
Deon
27.09.12
✎
10:48
|
(105) Ошибку не выдаёт, но и строк не возвращает
|
|||
107
ssh2006
27.09.12
✎
10:48
|
(106) попробуй )
ВЫБРАТЬ 1 КАК Поле1 ГДЕ NULL = NULL |
|||
108
Ненавижу 1С
гуру
27.09.12
✎
10:49
|
(106) все логично, отвали))
|
|||
109
Deon
27.09.12
✎
10:50
|
(107) Ну тут вроде как понятно, почему не выдает ничего. Сравнение с null возвращает ложь. Или всё-таки возвращает null?
|
|||
110
Kashemir
27.09.12
✎
10:50
|
(0) Абсолютно правильный читабельный код, позволяющий отделить ИСТИНА от всех других значений.
(106) Конфигуратор 1С:Предприятие 8 Правила сравнения значений Важно! Любая операция сравнения двух значений, в которой участвует хотя бы одно значение NULL, дает результат, аналогичный значению ЛОЖЬ. |
|||
111
Deon
27.09.12
✎
10:51
|
(110) Ну дык получается же тогда ГДЕ НЕ ЛОЖЬ. Или не получается?
|
|||
112
GANR
27.09.12
✎
10:52
|
Если НЕ НеФиксироватьВРегистре = Истина Тогда
<исполняемый код> КонецЕсли; равносильно Если НеФиксироватьВРегистре <> Истина Тогда <исполняемый код> КонецЕсли; но никак не Если Не НеФиксироватьВРегистре Тогда <исполняемый код> КонецЕсли; или Если НеФиксироватьВРегистре = Ложь Тогда <исполняемый код> КонецЕсли; Последние 2 фрагмента кода работают НЕ так, как (0), поскольку НеФиксироватьВРегистре может быть равно не только "Истина" и "Ложь", но и ещё чему-то. Скажем, "Неопределено". Предпоследний код в таком случае выдаст синтаксическую ошибку. |
|||
113
ssh2006
27.09.12
✎
10:53
|
(111) НЕ (NULL = НЕОПРЕДЕЛЕНО) --> NULL <> НЕОПРЕДЕЛЕНО ---> ложь
|
|||
114
Deon
27.09.12
✎
10:56
|
(113) Ужасть какая.
|
|||
115
dmpl
27.09.12
✎
10:59
|
(111) Аналогичный, но не ЛОЖЬ.
|
|||
116
Deon
27.09.12
✎
10:59
|
Мнения разделились )
|
|||
117
dmpl
27.09.12
✎
11:06
|
(116) А тут как с 4-м айФоном - сравнивать надо правильно ;)
|
|||
118
dmpl
27.09.12
✎
11:08
|
Анекдот в тему (72):
- доктор, когда я делаю вот так - мне вот тут больно. - не делайте так. |
|||
119
stonewolf
27.09.12
✎
11:08
|
Творчество одного из крупнейших производителей пива в России:
Для Сч = 0 По (ТаблицаТоваров.Количество() - 1) Цикл НовСтр1 = ТаблицаТоваров.Получить(Сч); Для Сч = 0 По (Докум.Товары.Количество() - 1) Цикл Количество = СтрЗаменить(Формат(Количество, "ЧРГ ='$' "), "$", ""); Количество = СтрЗаменить(Количество, ",", "."); Тысячи их... Явно недопереученный клюшечник делал. |
|||
120
aka MIK
27.09.12
✎
11:28
|
(0) Из типовой:
i=1; Для Инд=1 по 1000 Цикл i=i+1; КонецЦикла Мамой клянусь! До сих пор этот код живет! |
|||
121
Kashemir
27.09.12
✎
11:30
|
(120) Это зачем ? Типа убогая пауза без учета производительности компа ?
|
|||
122
lucifer
27.09.12
✎
11:31
|
это обфускация )
|
|||
123
rsv
27.09.12
✎
11:40
|
(0) "Если НЕ НеФиксироватьВРегистре = Истина "
Если НЕ НеФиксироватьВРегистре = 1 . Так надежнее. |
|||
124
McNamara
27.09.12
✎
11:48
|
(0) Автор хотел показаться умным, а выяснилось что его род занятий из профайла соответствует действительности.
|
|||
125
jump if overflow
27.09.12
✎
11:50
|
(120) вероятно переменная i нужна дальше по коду
|
|||
126
Kashemir
27.09.12
✎
11:58
|
(125) Со значением 1001 ? А нельзя было просто присвоить ?
|
|||
127
ssh2006
27.09.12
✎
11:59
|
(125) вероятно, i = 1001 не взлетело
|
|||
128
Надсмотрщик
27.09.12
✎
12:07
|
(0) Ты забыл указать про Снеговика.
А для клюшек - нормуль ;-) |
|||
129
Мигрень
27.09.12
✎
12:07
|
Строгая типизация спасет отцов русской демократии. Учитесь не пихать в одну переменную разные типы. Будьте мужиками блиать!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |