|
Пишу код (параноик стайл) | ☑ | ||
---|---|---|---|---|
0
Вуглускр1991
23.07.16
✎
00:29
|
СвойствоНеЗагружатьОбъект = Неопределено;
Если Не ОбъектОписаниеСвойства.Свойство("НеЗагружатьОбъект", СвойствоНеЗагружатьОбъект) Тогда СвойствоНеЗагружатьОбъект = Ложь; КонецЕсли; Хочу иметь гарантированно логическую переменную, в одном из двух состояний. Избыточно? |
|||
1
Alexor
23.07.16
✎
00:34
|
Если условие не отработает, в коде переменная как отрабатывается? Ошибки не будет?
|
|||
2
Garykom
гуру
23.07.16
✎
00:39
|
(0) Это скорее индусо-китай стайл.
Если хочется четко и понятно то в условии проверяй готовую переменную на истина/ложь, а не засовывай туда сложную функцию. Еще можно правильно обработать всевозможные варианты через Если...ИначеЕсли...Иначе...КонецЕсли причем их можно по очереди проверить которые устанавливают "флаг" переменную объявленную выше. А в конце просто "флаг" проверяешь и все. |
|||
3
Вуглускр1991
23.07.16
✎
00:42
|
Я как раз далее в коде проверяю
СвойствоНеЗагружатьОбъект |
|||
4
Garykom
гуру
23.07.16
✎
00:43
|
Примерно так:
|
|||
5
Вуглускр1991
23.07.16
✎
00:45
|
(4) При всех вариантах входящих данных и твой и мой коды дадут одинаковые выходы.
Я итак по максимуму сократил количество строк КМК |
|||
6
Вуглускр1991
23.07.16
✎
00:49
|
Писать, кстати, вот такое
"Если СвойствоНеЗагружатьОбъект = Истина Тогда" и есть индусо-китай, проверка булевой переменной на равенство значению Истина может быть по праву использована лишь в запросах, когда их пишут под СУБД. Во всех остальных случаях "Если СвойствоНеЗагружатьОбъект Тогда" |
|||
7
Garykom
гуру
23.07.16
✎
00:51
|
(6) Я в курсе специально написал чтобы понятнее было, можно же в одно условие свернуть с И.
|
|||
8
Garykom
гуру
23.07.16
✎
00:52
|
(7)+ Ну или перевернуть по или
Если Не СвойствоПолучено ИЛИ Не СвойствоНеЗагружатьОбъект Тогда СвойствоНеЗагружатьОбъект = Ложь; КонецЕсли; |
|||
9
Вуглускр1991
23.07.16
✎
00:55
|
Я на самом деле о том, что 1С дает метод "Свойство",
но приходится его в дополнительный код оборачивать, или доказывать, что данное свойство в данной точке будет определено обязательно и через нужный тип. |
|||
10
Garykom
гуру
23.07.16
✎
01:10
|
Думаем если приравнять Неопределено/NULL к Ложь будет лучше?
|
|||
11
Garykom
гуру
23.07.16
✎
01:12
|
СвойствоНеЗагружатьОбъект = Неопределено;
ОбъектОписаниеСвойства.Свойство("НеЗагружатьОбъект", СвойствоНеЗагружатьОбъект); Если Не СвойствоНеЗагружатьОбъект Тогда СвойствоНеЗагружатьОбъект = Ложь; КонецЕсли; |
|||
12
Вуглускр1991
23.07.16
✎
01:14
|
(10) Неявно привести в операциях сравнения ...
но может и не лучше. Я полюбил 8-ку за строгую типизацию Ссылка, Объект, Выборка СписокЗначений, ЭлементСпискаЗначений Так делается много меньше ошибок, из-за которых в 7.7 бывало по часу в отладчике высиживаешь. |
|||
13
Вуглускр1991
23.07.16
✎
01:16
|
(11) Если в каком-либо правиле свойство установлено не было, то ругнется после "Не"
|
|||
14
Лефмихалыч
23.07.16
✎
02:10
|
(0) если Свойство() вернет истину, то при таком коде у тебя ни каких гарантий вообще, т.к. в структуре может быть и не булево. Чтобы было с гарантией, надо проверять тип свойство и принимать какое-то решение, если он - не булево.
|
|||
15
youalex
23.07.16
✎
02:37
|
(0) ЗаполнитьЗначенияСвойств() можно пользовать
|
|||
16
Вуглускр1991
23.07.16
✎
02:44
|
(14) С таким ключом я буду совать туда только булево. Если же структуру формирую не я, а чей-то ещё код - то да, надо проверять и тип тоже.
|
|||
17
youalex
23.07.16
✎
02:48
|
(15) +
ВремСтруктура = Новый Структура("СвойствоНеЗагружатьОбъект ") ЗаполнитьЗначенияСвойств(ВремСтруктура, ОбъектОписаниеСвойства) СвойствоНеЗагружатьОбъект = ВремСтруктура.СвойствоНеЗагружатьОбъект |
|||
18
youalex
23.07.16
✎
02:49
|
(17) + без этих сгганых гесли.
|
|||
19
aurora909
23.07.16
✎
03:31
|
(18) почему "г"если ? к чему ?
|
|||
20
youalex
23.07.16
✎
03:46
|
(19) вам не понягть. поживите с мгоё
|
|||
21
aurora909
23.07.16
✎
04:17
|
(20) ну хорошо
|
|||
22
hhhh
23.07.16
✎
06:33
|
(16) поэтому и пишут
Если СвойствоНеЗагружатьОбъект = Истина Тогда потому что это одновременно и проверка типа, и проверка значения. И всё в одной строчке. ноу хау такое. |
|||
23
wertyu
23.07.16
✎
06:36
|
(22) с такой проверкой на тип, если там не булево и не число, выдаст ошибку )
|
|||
24
wertyu
23.07.16
✎
06:44
|
+(23) для полного утрирования в коде не хватает Попытки
|
|||
25
hhhh
23.07.16
✎
07:13
|
(23) нет, ошибку не выдаст. Там именно варианты НЕОПРЕДЕЛЕНО и NULL. В этих вариантах
Если СвойствоНеЗагружатьОбъект = Истина Тогда сработает нормально. А без проверки типа Если СвойствоНеЗагружатьОбъект Тогда выдаст ошибку. В этом принципиальная разница между двумя этими проверками. |
|||
26
Рэйв
23.07.16
✎
07:56
|
(25)ссылку тоже не логику неявно не проверит. Все равно придется
Если ссылка<>истина |
|||
27
mehfk
23.07.16
✎
08:04
|
СвойствоНеЗагружатьОбъект = Неопределено;
ОбъектОписаниеСвойства.Свойство("НеЗагружатьОбъект", СвойствоНеЗагружатьОбъект); СвойствоНеЗагружатьОбъект = (СвойствоНеЗагружатьОбъект = Истина); |
|||
28
DES
23.07.16
✎
09:01
|
(27) масломаслянное = (масломаслянное=точномасломаслянное);
|
|||
29
romix
23.07.16
✎
09:26
|
(0) Вот где троичная логика-то понадобилась...
А в запросах той же 1С троичная логика уже есть - можно попробовать запросами делать то, что вы там хотите сделать. Запросы есть и по таблице значений, если что. |
|||
30
Mort
23.07.16
✎
09:30
|
Плохо использовать НЕ в названии переменной, если простым языком.
|
|||
31
mehfk
23.07.16
✎
09:40
|
(28) Поясни.
|
|||
32
vvp91
23.07.16
✎
09:54
|
Мда, писатели.
Следующий код упадет, если переменная содержит Неопределено или Null
(0) Сделай так:
|
|||
33
vvp91
23.07.16
✎
09:58
|
(0) Еще один момент - очень плохо, когда используют частицу Не в названиях переменных, процедур, функций, имен объектов и реквизитов метаданных.
Двойное отрицание при проверках или чтении таких названий взрывает мозг. Поэтому (32) можно переписать как:
|
|||
34
Лефмихалыч
23.07.16
✎
12:18
|
(16) с такой логикой тебе и эта проверка не нужна
|
|||
35
В тылу врага
23.07.16
✎
12:49
|
СвойствоНеЗагружатьОбъект = ОбъектОписаниеСвойства.Свойство("НеЗагружатьОбъект", СвойствоНеЗагружатьОбъект) И СвойствоНеЗагружатьОбъект;
|
|||
36
тарам пам пам
23.07.16
✎
12:57
|
(0) Код нормальный. В типовых 1с пишут как в (35) для булевых свойств. Хотя я бы вообще сделал примерно так:
Функция ОписаниеСвойства(ОткудаОниТамПолучаются) Описание = Новый Структура("НеЗагружатьОбъект, ЕщеКакиеТоСвойства", Ложь, Ложь); ЗаполнитьЗначенияСвойств(Описание, ОткудаОниТамПолучаются); Возврат Описание; КонецФункции Так проще потом поменять будет значение по умолчанию + сразу видно, что вообще может быть в структуре. Ну и можно проверку типов сюда же запихать, если уж быть совсем параноиком. |
|||
37
В тылу врага
23.07.16
✎
12:59
|
+(35) если там не булево:
СвойствоНеЗагружатьОбъект = ОбъектОписаниеСвойства.Свойство("НеЗагружатьОбъект", СвойствоНеЗагружатьОбъект) И (СвойствоНеЗагружатьОбъект=Истина); |
|||
38
NoNameYet
23.07.16
✎
15:44
|
Немного шокирован предложенными вариантами. Я бы так написал:
Если ОбъектОписаниеСвойства.Свойство("НеЗагружатьОбъект") Тогда СвойствоНеЗагружатьОбъект = ОбъектОписаниеСвойства.НеЗагружатьОбъект; Иначе СвойствоНеЗагружатьОбъект = Ложь; КонецЕсли; |
|||
39
Злопчинский
23.07.16
✎
15:58
|
(38) как ламер - я бы так не писал. не люблю длинные выражения в условиях.
|
|||
40
NoNameYet
23.07.16
✎
16:14
|
(39) Во-первых, в коде пиписьками не меряюсь, считаю, что чем понятнее код, тем лучше. Во-вторых, где здесь длинное выражение в условии?
|
|||
41
novichok79
23.07.16
✎
16:22
|
мой индусогод:
Если ОбъектОписаниеСвойства.Свойство("НеЗагружатьОбъект") Тогда СвойствоНеЗагружатьОбъект = ОбъектОписаниеСвойства.НеЗагружатьОбъект; КонецЕсли; Если ТипЗнч(СвойствоНеЗагружатьОбъект) <> Тип("Булево") Тогда СвойствоНеЗагружатьОбъект = Ложь; КонецЕсли; |
|||
42
novichok79
23.07.16
✎
16:24
|
(42) *т. е. индусокод
перед условием еще надо явно задать значение переменной СвойствоНеЗагружатьОбъект = Неопределено; |
|||
43
Злопчинский
23.07.16
✎
16:40
|
а еще некоторые любят вложенные если по 5-7 уровней, хотя в большинстве случаев такой код спокойно транстформируетя в одно или двухуровневый если
|
|||
44
NoNameYet
23.07.16
✎
16:43
|
(43) Предложи свой вариант, покажи класс))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |