Вход | Регистрация
    1  2  3   

Откуда идет такой стиль разработки: НЕ ДокументСсылка.Проведен = Ложь?

Откуда идет такой стиль разработки: НЕ ДокументСсылка.Проведен = Ложь?
Я
   wowik
 
23.01.19 - 10:12
4. Другое46% (11)
2. Программисты со стажем38% (9)
1. Начинающие программисты так пишут13% (3)
3. Гуманитарии, пришедшие в 1С4% (1)
Всего мнений: 24

Лично мне не нравится, когда пишут: НЕ ДокументСсылка.Проведен = Ложь.
Разве нельзя писать  "ДокументСсылка.Проведен = Истина"? - так разве не нагляднее?
 
 
   Mankubus
 
1 - 23.01.19 - 10:13
а мне не нравится слово "токой"

4. Другое
   butterbean
 
2 - 23.01.19 - 10:14
разве нельзя написать просто
ДокументСсылка.Проведен ??

4. Другое
   Hans
 
3 - 23.01.19 - 10:15
можно так сделать
НЕ НЕ НЕ ДокументСсылка.Проведен = Ложь
   MaxS
 
4 - 23.01.19 - 10:15
(2) Так может ошибка получиться, если документ битая ссылка
   palsergeich
 
5 - 23.01.19 - 10:16
Издержки работы в языке с динамической типизации.
Конкретно в этом случае Избыточно, но в общем случае бывает необходимо, потому что внезапно может быть неопределенно и ошибка в рантайме.
Особенно часто такое происходит например в запросах где с течением времени тип становится составным. И уже будет не пустая ссылка, а Неопределенно.
   wowik
 
6 - 23.01.19 - 10:18
(1) не правильно написал)?  нужно писать "такоЕ"?  - я отстою от развития русского языка на 25 лет, школьного курса)
   MaxS
 
7 - 23.01.19 - 10:18
Обычно пишут 
Если НЕ ОднаПеременная=ДругаяПеременная Тогда
Вместо
Если ОднаПеременная<>ДругаяПеременная Тогда
Видимо кто-то со стажем заработался.

2. Программисты со стажем
   wowik
 
8 - 23.01.19 - 10:18
(6) *неправильно
   palsergeich
 
9 - 23.01.19 - 10:18
Если Вы с этим не сталкивались и Вам кажется это дикостью, то я в свое время нажрался подобного говна и ожидаемое значение указываю явно.

2. Программисты со стажем
   Akela has missed
 
10 - 23.01.19 - 10:31
(9) тут не ожидаемое значение, а отрицание обратного ожидаемого значения
 
 Рекламное место пустует
   Eiffil123
 
11 - 23.01.19 - 10:49
ДокументСсылка.Проведен

1. Начинающие программисты так пишут
   Eiffil123
 
12 - 23.01.19 - 10:50
(7) зачем так обычно пишут?
   wowik
 
13 - 23.01.19 - 10:54
1

1. Начинающие программисты так пишут
   seevkik
 
14 - 23.01.19 - 10:56
Так значение инвертирует погромист с недостаточным стажем
Начинающий до такого не додумается

2. Программисты со стажем
   VladZ
 
15 - 23.01.19 - 10:57
(0) Тоже задавался таким вопросом. Один из вариантов ответов была таким: "Лень раскладку переключать".

Сам пишу так: ДокументСсылка.Проведен
   Casey1984
 
16 - 23.01.19 - 10:58
Это пятничный код ;-)

4. Другое
   MaxS
 
17 - 23.01.19 - 11:06
(12) Вроде как НЕ = быстрее, чем <>
   unregistered
 
18 - 23.01.19 - 11:06
(0) >> Разве нельзя писать  "ДокументСсылка.Проведен = Истина"?

Можно.

>> так разве не нагляднее?

Нет. Не нагляднее. Нагляднее просто ДокументСсылка.Проведен.
Раньше в запросах так нельзя было писать, а надо было непременно использовать оператор сравнения. Теперь разрешили (с какой точно версии не помню).
   Franchiser
 
19 - 23.01.19 - 11:09
А если ДокументСсылка Неопределенно или Пустая ?
   NikeArz
 
20 - 23.01.19 - 11:10
(0) Добрый день. Обратите внимание на кусок кода из типой 1С УТ 11.4

Функция ПолучитьМаксимальнуюДатуВКоллекцииДокументов(МенеджерВременныхТаблиц) Экспорт
    
    Запрос = Новый Запрос("
    |ВЫБРАТЬ
    |    ЕСТЬNULL(МАКСИМУМ(КоллекцияДокументов.Ссылка.Дата), НЕОПРЕДЕЛЕНО) КАК Период
    |ИЗ
    |    ТаблицаДанныхДокументов КАК КоллекцияДокументов
    |");
    
    Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    
    Результат = Запрос.Выполнить();
    
    Если Не Результат.Пустой() Тогда
        МаксимальнаяДата = Результат.Выгрузить()[0].Период;
        
        Если МаксимальнаяДата = Неопределено Тогда
            МаксимальнаяДата = ТекущаяДатаСеанса();
        КонецЕсли;
    Иначе
        МаксимальнаяДата = ТекущаяДатаСеанса();
    КонецЕсли;
    
    Возврат МаксимальнаяДата;
КонецФункции


Здесь также применяется НЕ. А ведь это типовая конфигурация, которую писать сертифицированные 1С программисты. Значит это кому-то надо.
   ДенисЧ
 
21 - 23.01.19 - 11:12
(18) Разрешили совсем недавно, где-то начиная с версии 8.1
   Aleksandr N
 
22 - 23.01.19 - 11:15
Похоже на преобразование дизъюнкции в конъюнкцию.

2. Программисты со стажем
   Tonik992
 
23 - 23.01.19 - 11:19
>> "ДокументСсылка.Проведен = Истина"
Даже так делать не надо.

Нужно "ДокументСсылка.Проведен" или "НЕ ДокументСсылка.Проведен".

А если есть угроза битой ссылки, тогда надо отдельно проверить, битая ссылка или нет. Так или иначе, если данных нет в кеше, 1С при разыменовании будет лезть в базу и получать больше данных, чем нужно.
   youalex
 
24 - 23.01.19 - 11:19
(0) Оба хуже
ДокументСсылка.Проведен - это ДокументСсылка.ПолучитьОбъект().Проведен
если объект еще не в кэше.
   Diman000
 
25 - 23.01.19 - 11:19
Все проверки булевых значений лучше писать явно
Если Проведен = ИСТИНА, а не просто Если Проведен
Не ... = Ложь тоже иногда бывает оправданно

Я когда сталкиваюсь с ошибкой типа, при неявной проверке Если Проведен, то всем говорю - типичная ошибка начинающего программиста)))

2. Программисты со стажем
   Tonik992
 
26 - 23.01.19 - 11:22
(25) >> Все проверки булевых значений лучше писать явно

Не советуйте такого. Это плохой стиль программирования.

Если кто-то копрокодил так, что переменная Проведен имеет разные градации серого, то от безвыходности используйте. Но самому писать такое ни в коем случае.
   Diman000
 
27 - 23.01.19 - 11:29
(26) А все же посоветую.
Это стиль правильного программирования на 1С.
Но вы можете считать по-другому, я совершенно не против.
   ДенисЧ
 
28 - 23.01.19 - 11:31
(27) Тогда почему в более других языках пишут?
bool a;
/// заполнение

if (!a) {
}


Тоже криворукие индусы?
   Вафель
 
29 - 23.01.19 - 11:32
некоторые просто не знают как писать на равно в 1с. может из других языков пришли.
а там все по другому
   Вафель
 
30 - 23.01.19 - 11:33
(27) у 1С свои стандраты и рекомендации, и она не согласна с тобой
   Гипервизор
 
31 - 23.01.19 - 11:35
(26) Ну это потому что - вот ))
https://svalko.org/data/2017_10_11_00_24_412930_1.jpeg
   Diman000
 
32 - 23.01.19 - 11:42
(28) Странный вопрос.
Какое мне дело до того как пишут на других языках?

(29)
Да нет проблем, пусть у них будут такие стандарты.
А у меня свои стандарты на все жизненные вопросы.
Я не собираюсь ничьи стандарты перенимать вслепую.
   Rovan
 
33 - 23.01.19 - 11:46
(0) "Если НЕ ОднаПеременная=ДругаяПеременная Тогда"

потому что требуется написать "Не равно" и значит визуально это тоже "НЕ ...=..."
А <> визуально не вызывает никаких ассоциаций !
 
 
   OldCondom
 
34 - 23.01.19 - 11:48
У меня внутри кто-то строит недовольную гримасу, когда пишу <>. Не знаю, почему. Хоть на других языках считай и не писал.
   Diman000
 
35 - 23.01.19 - 11:51
(34) Переключатель раскладки клавиатуры ее строит)))
   OldCondom
 
36 - 23.01.19 - 11:52
(35) а вот это аргумент кстати
   Fish
 
37 - 23.01.19 - 11:55
(35) О да. Особенно, когда приходится писать WebЦвета и подобные :))
   unregistered
 
38 - 23.01.19 - 11:56
(21) > Разрешили совсем недавно.

Суть не в том давно или недавно. Суть в том, что была такая разница. А значит те, кто вынужден был сопровождать конфигурации, работавшие под старые версии платформы должны были учитывать эту особенность и писать код так, чтобы он работал корректно и под 8.1 и под 8.3. Не говоря уже о том, что сплошь и рядом встречается код, который без изменения тянется со стародавних времён.
   palsergeich
 
39 - 23.01.19 - 11:58
(10) это не важно, все равно будет ошибка рантайме при приведении типа.
   Гипервизор
 
40 - 23.01.19 - 11:59
(35)(37) У вас просто неправильные раскладки.
   breezee
 
41 - 23.01.19 - 12:13
(0) Криворукость, сэр

3. Гуманитарии, пришедшие в 1С
   Гипервизор
 
42 - 23.01.19 - 12:16
(38) Кстати да, в 8.3.6 можно стало писать в запросах вот так: ВЫБРАТЬ 1 <> 2
А раньше приходилось писать через ВЫБОР.
Но это же не значит, что надо переписывать старый код.
   Tonik992
 
43 - 23.01.19 - 12:16
(27) И все же неверно.
В переменной булевского типа ожидать другой тип.. Это значит надо еще понять, почему такой тип у неё оказалось. Вдруг автор кода на "Неопределено" что-то завязал? Это уже не булево, а трулево. Три возможных значения.

Если Документ.Проведен = Ложь ИначеЕсли Документ.Проведен = Истина ИначеЕсли Документ.Проведен = Неопределено так чтоле?

Не надо для переменной булевского типа подразумевать что-то иное. Нужно пресекать такую возможно до условного оператора.
   assasu
 
44 - 23.01.19 - 12:18
(0) как думается так и пишется.. внутренний голос постоянно говорит "нет"
   1Снеговик
 
45 - 23.01.19 - 12:23
(20) дурацкий пример, в самом НЕ никакого криминала нет, и никто не говорит что его использовать нельзя
   Diman000
 
46 - 23.01.19 - 12:23
(43) По моему мнению надо пресекать совершенно лишние ошибки в коде, а не выдумывать себе кем-то навязанные ограничения.
Что мешает тебе совместить внимательно отслеживание типа и указание Проведен = Истина на случай если вдруг ты не все отследил?
Да и вообще, код в 1С постоянно правят разные люди.
И ты сам когда что-то правишь, условно, через год, то уже приравниваешься к этим разным людям.
Как ты собираешься им всем объяснить как нужно аккуратно следить за типом?
Как ты собираешься объяснять ошибку заказчику или руководителю? Вот тут выскочила ошибка, потому что я не ожидаю в булевской переменной другой типа и считаю, что так правильно?
А тебе ответят, что вот у Димы ошибка не выскочила, потому что он размышляет несколько иначе...
   Tonik992
 
47 - 23.01.19 - 12:37
(46) Так увеличивается энтропия кода.
Небольшая ирония на эту тему:
Если у вас есть числовое значение, то хороший тон делать так:
Если ТипЗнч(Число1) = Тип("Число") И Число1 = 15 Тогда
КонецЕсли ? Ведь вдруг в переменной Число1 записана строка, ну вот проскользнуло где-то там, в середине алгоритма..

>> на случай если вдруг ты не все отследил
Именно благодаря таким ошибка и рождается профессионал. Лучше ошибиться в таком месте, чем поощрять такой код.
   DexterMorgan
 
48 - 23.01.19 - 12:39
(0) Лично мне не нравится, когда пишут: "ДокументСсылка.Проведен = Истина".
Разве нельзя писать  "ДокументСсылка.Проведен"? - так разве не нагляднее?
   Tonik992
 
49 - 23.01.19 - 12:43
(46) >> Как ты собираешься объяснять ошибку заказчику или руководителю
Вот где кроется скелет.
Так ведь можно просто везде сделать так:
Попытка
Исключение
КонецПопытки
Вообще не придется ничего не кому объяснять. Никаких ошибок -)
 
 Рекламное место пустует
   Diman000
 
50 - 23.01.19 - 12:44
(47) Не надо все доводить до маразма.
А то один умник на моей памяти в функцию БСП ПолучитьЗначениеРеквизита (не дословно) вставил Попытку.
После чего при ошибке прав доступа она перестала ругаться, а начала возвращать пустые значения от которых вызывающие алгоритмы развалились.

>> Именно благодаря таким ошибка и рождается профессионал. Лучше ошибиться в таком месте, чем поощрять такой код.

Не соглашусь. Там где можно не ошибаться, лучше не ошибаться вообще.
   DexterMorgan
 
51 - 23.01.19 - 12:45
(50) Так ты и доводишь до маразма пытаясь отследить тип у "Проведен"
   Diman000
 
52 - 23.01.19 - 12:45
(49) Хе-хе, см. выше.
Будь умен и гибок, не слушай никого на веру, все обдумывай сам, у тебя голова светлая.
И ты станешь профессионалом.
   Diman000
 
53 - 23.01.19 - 12:46
Ладно, спор ни о чем уже.
Не проверяйте булево через Проведен = Истина, проверяйте как Проведен.
Тем лучше для меня, я же из практики все говорю, а не как теоретик...
   mikecool
 
54 - 23.01.19 - 12:48
(45) да, только это лишняя операция, можно просто содержимое поменять местами и убрать НЕ
   NikeArz
 
55 - 23.01.19 - 12:57
(45) Пример не дурацкий. Он также говорит о том что НЕ можно применять. Читайте внимательнее.
   Tonik992
 
56 - 23.01.19 - 12:57
(53) слишком много копрокода на вашем пути встречается, мне кажется.

Допустим, выражение (ДокументСсылка.Проведен = Ложь) - будет ИСТИНА.
Это выражение не скажет мне, что ссылка битая. А внутри условия мне нужно использовать ДокументСсылка. Я смогу это сделать? Нет.

Приведите пожалуйста примеры алгоритмов, где ДокументСсылка.Проведен = Ложь оправдан. Как практик, опишите такой алгоритм
   Tonik992
 
57 - 23.01.19 - 12:58
(56) Не так, (ДокументСсылка.Проведен = Ложь) вернет ЛОЖЬ.
   DexterMorgan
 
58 - 23.01.19 - 13:03
(56) Он хотел просто показаться умным (не вышло)
   Diman000
 
59 - 23.01.19 - 13:06
(56) Я завел разговор об общем случае проверки значений булевых переменных.
И ты, кстати, именно с этим не согласился.
Так что не надо сейчас все сводить к вырожденному случаю, да еще и с дополнительным условиями.

В моей практике несколько раз в год возникают "красные" ошибки, которых легко можно было бы избежать написав = Истина. И все бы работало верно.
   Tonik992
 
60 - 23.01.19 - 13:18
(59) Мне действительно стало интересно. Может есть такие случаи, когда оправдано, просто я не встречал такого..
Ну и потом... описывая, как вы говорите, "в общем случае", вы затем приводите частный случай с Проведен = Истина. в (25). Поэтому всё честно, и ветка же сама про ДокументСсылка.Проведен = Истина.
Вы ушли от частной темы к общему...

И я был не согласен с советом:
>> "Все проверки булевых значений лучше писать явно".
Зачем же так.. от пары красных ошибок такой сразу мощный совет в противовес сложившейся практики.
   Diman000
 
61 - 23.01.19 - 13:22
(60) Посмотри сколько мне лет и умнож на несколько раз в год.
Эта "не пара красных ошибок", это много регулярных красных ошибок.
Практика программирования в 1С вообще сложилась так, что я допускаю намного меньше ошибок, чем многие другие. В том числе и из-за Проведен = Истина.
Что же мне теперь равняться на них из-за их сложившейся практики? Нет, на это я пойтить не могу...
   wowik
 
62 - 23.01.19 - 13:29
(61) +1
   bolobol
 
63 - 23.01.19 - 13:33
(61) Одного не пойму, всё же какую именно "красную" ошибку вы решаете кодом "Проведен = Истина"? Сравнение возвращает булево, ожидает приводимые к друг-другу типы слева и справа от сравнения, т.е. булево и число. Число и булево без операции сравнения вполне себе адекватно сами определяют ответ на Если. Тогда что вы за "красные" ошибки предвосхищаете?
   bolobol
 
64 - 23.01.19 - 13:34
Коли опыта на 50+ фиксов - поделитесь уж, иначе... ну, вы поняли.
   bolobol
 
65 - 23.01.19 - 13:48
Проведён больше Истины в 50 раз? И это проблема выполнению кода, где требуется строго "Проведен = Истина"? Кажется, я догадался. Это называется - нецелевое использование данных.
   bolobol
 
66 - 23.01.19 - 13:49
Но тогда, получается, что вы не избегаете ошибок, а порождаете их...
   bolobol
 
67 - 23.01.19 - 13:50
Следующий программист ваше "Проведен = Истина" упростит до "Проведен" и словит кучу исключительных ситуаций в дальнейшем, будет крайне удивлён ошибке "Индекс за пределами" в коду "ТЗ[ДокументСсылка.Проведен]"
   Diman000
 
68 - 23.01.19 - 14:29
Ну не в Проведен дело, а в булевых проверках.
Типичный случай это когда булевое значение получается из запроса.
Оно иногда бывает неопределено, например.
   DexterMorgan
 
69 - 23.01.19 - 14:45
(68) Так если бы ты весь свой код херачил бы в попытке, то у тебя было бы ошибок еще меньше,тебе уже советовали.
   DexterMorgan
 
70 - 23.01.19 - 14:47
(68) Приведи пример с неопределено из твоей практике для ожидаемого булева, что то имхается, что ты гонишь
   DexterMorgan
 
71 - 23.01.19 - 14:47
(68) Практики*
   Numerus Mikhail
 
72 - 23.01.19 - 14:48
(70) из-за левого соединения или битой ссылки получается NULL
   Ненавижу 1С
 
73 - 23.01.19 - 14:49
почему в операторе Попытка...Исключение нет раздела finally?
   shuhard_серый
 
74 - 23.01.19 - 14:49
(0) ни о чем

4. Другое
   DexterMorgan
 
75 - 23.01.19 - 14:51
(72) речь про неопределено
   Ненавижу 1С
 
76 - 23.01.19 - 14:52
давайте про NULL и Неопределено поговорим
   Numerus Mikhail
 
77 - 23.01.19 - 14:54
(75) NULL в запросе превращается в Неопределено в результирующей выборке
   DexterMorgan
 
78 - 23.01.19 - 14:56
(77) Причем тут это?мы говорим про типы в запросе
   Ненавижу 1С
 
79 - 23.01.19 - 14:56
(77) это что сейчас ты такое сказал?
   Numerus Mikhail
 
80 - 23.01.19 - 14:58
(79) это я сейчас очень сильно тупанул, не обращай внимания
   Tonik992
 
81 - 23.01.19 - 14:59
(77) ;d wtf? Что за превращение такое?
(68) составной тип? А ДокументСсылка.Проведен составного типа не имеет.
   DexterMorgan
 
82 - 23.01.19 - 15:01
(81) Составной тип из булева и чего то еще, это круто.
   Diman000
 
83 - 23.01.19 - 15:05
(82) Бывают случаи когда булево + дата хорошо заходит.
Например, для план-фактов контрольных событий.
Одной даты бы хватило, но некоторые события для некоторых позиций могут быть выключены.
   PR
 
84 - 23.01.19 - 15:09
Поражает, как некоторые борются за говнокод как за родного ребенка, убить готовы
   singlych
 
85 - 23.01.19 - 15:12
(70) был какой-то прикол, что на каком-то постгри минимум(ЛОЖЬ, ИСТИНА, NULL) давал NULL.
   bolobol
 
86 - 23.01.19 - 15:25
(85) Прикол был бы, если бы не NULL давал.

Самое интересное, что "НЕ NULL = Ложь" - отрабатывает как истина, занятно, однако.
   Сияющий в темноте
 
87 - 23.01.19 - 15:26
Вообще то,наличие Null в операторе сравнения для некоторых языков означает,что на выходе тоже будет Null независимо от остальных данных,так что для посгре ответ вполне ожидвемый,это 1с думает по другому.
   singlych
 
88 - 23.01.19 - 15:26
(0) Если Док.Проведен вообще не булево, то
Док.Проведен = Истина даст ложь, а НЕ Док.Проведен = Ложь даст истину.
   singlych
 
89 - 23.01.19 - 15:28
(86) (87)
Я имею в виду, что такой запрос на 1с возвращал null на постгри, а на скуле ложь.
   bolobol
 
90 - 23.01.19 - 15:29
(89) Неожиданно. Null - это вообще ничего, а ложь - это уже что-то. Равно как и на ноль делить - сколько у каждого? Казалось бы - ноль, но нет, нельзя делить на ноль.
   bolobol
 
91 - 23.01.19 - 15:31
(88) Любое сравнение с NULL в языке 1С даёт ложь. Что с Истиной, что с ложью. Странно, однако.
   bolobol
 
92 - 23.01.19 - 15:32
В запросах - любое с NULL = NULL, а в языке = Ложь...
   МимохожийОднако
 
93 - 23.01.19 - 15:36
Если работает, то можно не удивляться.

4. Другое
   DexterMorgan
 
94 - 23.01.19 - 15:38
(83) Тот, кто это спроектировал просто мудак
   DexterMorgan
 
95 - 23.01.19 - 15:39
(85) Речь про неопределено
   DexterMorgan
 
96 - 23.01.19 - 15:42
(83) Забавно говнокодер учитывает решение говноархитектора. Слаженная команда
   Diman000
 
97 - 23.01.19 - 15:43
(94) Ты хоть бы одно обоснование привел в защиту своих резких оценок.
Ты бы как структуру данных для такой задачи спроектировал?
   DexterMorgan
 
98 - 23.01.19 - 15:44
(97) Отдельно дата, отдельно использование
   Diman000
 
99 - 23.01.19 - 15:45
(98) И потом тебе предстоит регулярная возня с визуализацией.
В чем ты видишь минус воткнуть все в одно поле?
   wowik
 
100 - 23.01.19 - 15:46
100!
  1  2  3   

Список тем форума
Рекламное место пустует  Рекламное место пустует
Программист всегда исправляет последнюю ошибку.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует