Имя: Пароль:
1C
1С v8
Про логические выражения
,
0 Ненавижу 1С
 
гуру
17.01.20
22:33
1. альтернативный вариант, второй 50% (4)
2. свой вариант (сейчас напишу) 25% (2)
3. типовой вариант, он же первый 13% (1)
4. КГ/АМ 13% (1)
5. третий вариант, через Если 0% (0)
Всего мнений: 8

Изучая типовые, наткнулся, что пишут так:

Элементы.Календарь.Доступность = ?(РежимУчетаОтсрочки = 1, Истина, Ложь);  //типовой вариант, он же первый

когда можно было писать:

Элементы.Календарь.Доступность = (РежимУчетаОтсрочки = 1);  //альтернативный вариант, второй

ну хорошо, что так ведь могли бы и вот так:

Если РежимУчетаОтсрочки = 1 Тогда                        //третий вариант, через Если
    Элементы.Календарь.Доступность = Истина;
Иначе
    Элементы.Календарь.Доступность = Ложь;
КонецЕсли;

А какой Ваш вариант?
1 mikecool
 
17.01.20
22:35
я пишу обычно по 2 варианту, но с учетом на будущее часто 3

свой вариант (сейчас напишу)
2 ssh2006
 
17.01.20
22:56
нормально

альтернативный вариант, второй
3 _Дайвер_
 
17.01.20
23:10
(0)По всякому нормально

1 вариант обозначает что используется ?()

2 вариант что объект РежимУчетаОтсрочки имеет тип Булево

3 вариант как сказал (1) на будущее

КГ/АМ
4 Tonik992
 
18.01.20
00:17
(0) Вероятно, второй вариант немножко запутанней выглядит. Однако, наличие скобок упрощает понимание, чем если бы их не было... вопрос..

Первый вариант, возможно, применяется для:
1. Лучшего восприятия,
2. Возможности легкого изменения значения с булевого на что-то другое.
5 Волшебник
 
модератор
18.01.20
00:20
(3) в пункте 2 неточность
6 RomanYS
 
18.01.20
00:23
(5) И при каких условиях результат [2] отличен jn [1]?
7 Волшебник
 
модератор
18.01.20
00:25
(6) у Дайвера написано, что РежимУчетаОтсрочки имеет тип Булево, а в сабже число сравнивается с числом и вот результат этого сравнения имеет тип Булево
8 Злопчинский
 
18.01.20
00:29
(7) не понял. загадочная фраза
"...написано, что РежимУчетаОтсрочки, " - что "что"..?
9 RomanYS
 
18.01.20
00:45
(7) Так в [1] то же самое.
10 palsergeich
 
18.01.20
00:58
Вариант 3 только.
Вариант 1 - рекомендуется не использовать тернарные операторы, пока не в стандарте
Вариант 2 - одна строка должна содержать одно действие, это есть в стандарте.
11 Злопчинский
 
18.01.20
01:11
ну если третий вариант то хотя бы так
Если РежимУчетаОтсрочки = 1
Тогда Элементы.Календарь.Доступность = Истина;
Иначе Элементы.Календарь.Доступность = Ложь;
КонецЕсли;
12 Asmody
 
18.01.20
01:20
Функция ДоступностьКалендаря(_РежимУчетаОтсрочки)
   Возврат _РежимУчетаОтсрочки = 1;
КонецФункции

//...

Элементы.Календарь.Доступность = ДоступностьКалендаря(РежимУчетаОтсрочки);
13 Tonik992
 
18.01.20
01:20
(10) Несовсем верно растолковали стандарт "Одна строка - одно действие".
В таком случае
Если А=2 И С=4 Тогда

Придется переписать на:
Если А=2
И С=4 Тогда
14 palsergeich
 
18.01.20
01:21
(13) Допускается в одной строке присутствие 2х однотипных операторов. это написано там же
15 Asmody
 
18.01.20
01:22
"Магические" константы - это плохо. Что такое "РежимУчетаОтсрочки = 1" - хз
16 palsergeich
 
18.01.20
01:22
(14) А случай когда в одной строке знак "=" является и оператором присваивания и оператором сравнения - нет
17 Asmody
 
18.01.20
01:24
(16) Когда знак "=" является и оператором присваивания, и оператором сравнения, - это уже к архитекторам языка.
18 Tonik992
 
18.01.20
01:24
(16) блин. Вы серьезно?)

Если А=2 И С<>4 Тогда

Если А=2
И С=4 Тогда
19 palsergeich
 
18.01.20
01:25
(18) Ты стандарты читал или поспорить заешл?
20 palsergeich
 
18.01.20
01:26
На выражение условных операторов свой раздел.
21 Asmody
 
18.01.20
01:27
(19) А стандарты те же люди придумывали, что и (17)?
22 Tonik992
 
18.01.20
01:29
Мне показалось вы хотели сказать, что "Вариант 2 - одна строка должна содержать одно действие, это есть в стандарте."  - это ваше противоречие. А вы наоборот привели довод в пользу использования. Я не понял сразу.
Не сердчайте, все мы люди.
23 palsergeich
 
18.01.20
01:29
(21) начинается.
А по существу?
24 palsergeich
 
18.01.20
01:30
(22) Ок, мог коряво написать. Приношу извинения за то что сформулировал двояко.
25 Tonik992
 
18.01.20
01:33
(15) да-да. Это всегда боль. Только разработчик, придумавший магическое число, знает его назначение.
26 Asmody
 
18.01.20
01:34
(23) По существу, никакие стандарты не отменяют необходимости думать головой.
27 Asmody
 
18.01.20
01:35
(25) Дня два.
28 palsergeich
 
18.01.20
01:36
(25) Я могу этому придумать только одно оправдание в типовой - если РежимУчетаОтсрочки - это число, которое на форму выведено как поле флажка.
29 Tonik992
 
18.01.20
01:37
(28) Опыт подсказывает многое....
30 MadHead
 
18.01.20
01:57
Тот случай когда избыточность кода улучшить читаемость.

типовой вариант, он же первый
31 TormozIT
 
гуру
18.01.20
08:30
Делаю вариант 2 и даже без скобок, если выражение простое.

альтернативный вариант, второй
32 Aleksey
 
18.01.20
08:37
(28) почему флажок, а не радиобатон?
33 Mort
 
18.01.20
09:07
?(<ЛогическоеВыражение>, Истина, Ложь) - тавтология имхо

альтернативный вариант, второй
34 Mort
 
18.01.20
09:09
Хотя второй вариант читался бы очевиднее, если бы оператор сравнения не был в написании идентичен присваиванию.
35 Ненавижу 1С
 
гуру
18.01.20
09:44
Я за второй вариант и когда присваивание обрамляю пробелами, а в сравнении пишу подряд:

Элементы.Календарь.Доступность = (РежимУчетаОтсрочки=1);

альтернативный вариант, второй
36 Конструктор1С
 
18.01.20
10:18
(0) хотя бы вот так

Если РежимУчетаОтсрочки = 1 Тогд
    РедактированиеДоступно = Истина;
Иначе
    РедактированиеДоступно = Ложь;
КонецЕсли;
Элементы.Календарь.Доступность = РедактированиеДоступно;

такой вариант читать и модифицировать легче других. Короткий оператор ?() лучше использовать как можно реже. Логическое условие может в любой момент усложниться. В этом случае: в программировании здорового человека оператор ?() развернут в блок Если; в программировании курильщика обязательно нагородят трудновоспринимаемую портянку в операторе ?()

свой вариант (сейчас напишу)
37 Конструктор1С
 
18.01.20
10:22
(12) такой вариант тоже годный. По феншуям тру-программирования рекомендуют выносить логические проверки в отдельные функции. Использование функций позволяет сделать код читабельнее и пояснить суть выполняемой проверки