Имя: Пароль:
1C
1С v8
Если <ЛогВыр> Тогда - оптимизация условия
,
0 roman383
 
20.01.15
08:59
Если ЛогВыр1 И ЛогВыр2 Тогда
   //...
КонецЕсли;

Если ЛогВыр1 - ЛОЖЬ, будет ли выполняться ЛогВыр2 или программа его игнорирует (ведь вне зависимости от значения ЛогВыр2 условие не будет выполнено)?
1 polosov
 
20.01.15
09:00
2 polosov
 
20.01.15
09:01
+(1) А, ты про 1с. Ну проверь. примерчик накидай.
3 roman383
 
20.01.15
09:05
(1) причем здесь математика. Как действует 1с-ка?
4 polosov
 
20.01.15
09:05
Булевы операции
Булевы операции
В языке определены следующие виды булевых операций:

И (AND) конъюнкция (булево И);
ИЛИ (OR) дизъюнкция (булево ИЛИ);
НЕ (NOT) логическое отрицание (булево отрицание НЕ).
Логические выражения вычисляются слева направо. Для того, чтобы избежать неоднозначности и управлять последовательностью операндов, следует применять круглые скобки.

Уровни старшинства логических операций:

Уровень 1 операнды заключенные в скобки;
Уровень 2 НЕ;
Уровень 3 И;
Уровень 4 ИЛИ.
(с) Справка 1С

Отсюда можно сделать вывод, что логические выражения (которые ты заключишь в скобки буду вычислены оба)
5 Cube
 
20.01.15
09:07
(0) Если первое условие = ЛОЖЬ, то второе условие даже не выполняется. Это удобно.
6 фобец
 
20.01.15
09:07
(0) не будет, у 1с "ленивая" логика
7 Lexey_
 
20.01.15
09:08
(0)
Если Условие1() И Условие2() Тогда
    
    А = 5;    
        
КонецЕсли;
    


Функция Условие1()
    
    Сообщить("Условие1");
    Возврат Ложь;

КонецФункции

Функция Условие2()
    
    Сообщить("Условие2");
    Возврат Истина;

КонецФункции
8 Cube
 
20.01.15
09:09
+(5) Пример:

Если Параметры.Свойство("Параметр1") И Параметры.Параметр1 = "Тра-ля-ля" Тогда

Раньше такой код привел бы к ошибке, если в параметрах нет поля Параметр1, а сейчас вполне отрабатывает и ошибок нет.

То есть, если в параметрах нет поля Параметр1, то сравнение значения Параметр1 не выполняется и ошибки не происходит.
9 dk
 
20.01.15
09:10
либо проверь на примере
либо делай вложенные условия
Если условие1 ТОгда
  Если условие2 Тогда
     ....
10 Fish
 
20.01.15
09:10
(8) "Раньше такой код привел бы к ошибке" - это когда такое было?
11 roman383
 
20.01.15
09:11
(8) раньше это когда?
12 Cube
 
20.01.15
09:12
(11) Найти не могу, но давно :)
13 фобец
 
20.01.15
09:13
Если Ложь И ...// это ложь, дальше уже не проверяем

Если Истина Или ..// это истина, дальше уже не проверяем
14 roman383
 
20.01.15
09:14
(6) где можно почитать про "ленивую логику"? У всех языков программирования она "ленивая" или нет?
15 Deon
 
20.01.15
09:14
(11) В 7.7 вроде была
16 dk
 
20.01.15
09:16
причем надо проверять как в коде, так и в запросах - могут отличаться
17 Deon
 
20.01.15
09:18
(16) В запросах, наверно, от СУБД зависеть может
18 фобец
 
20.01.15
09:21
19 фобец
 
20.01.15
09:23
Нестрогие вычисленияПравить
20 Cube
 
20.01.15
09:24
(15) Возможно))))
21 polosov
 
20.01.15
09:25
(14) Тут наверное вопрос надо задавать разрабам платформы. На партнерском форуме пусть задаст кто-нибудь из франчей.
22 Зеленый пень
 
20.01.15
09:25
(0) В 7.7 - выполняется, в 8.0 и выше - не выполняется. Точка.
23 GROOVY
 
20.01.15
09:28
(21) Проверить лень?
24 Deon
 
20.01.15
09:28
(13) Про ИЛИ я, кстати, как-то не задумывался. Спасибо.
25 Lexey_
 
20.01.15
09:29
(7) не убедило?
26 dk
 
20.01.15
09:31
в файловой 8-ке в запросе ленивая логика
в скульной тоже ленивая в запросе
27 polosov
 
20.01.15
09:33
Нда ленивая.
28 Оранжевое настроение
 
20.01.15
09:53
В 7.7 будет, в 8.х не будет
29 extrim-style
 
20.01.15
10:25
(4) > "Отсюда можно сделать вывод, что логические выражения (которые ты заключишь в скобки буду вычислены оба)"

ошибочное утверждение
(ЛогВыр1 И ЛогВыр2) в случае ЛогВыр1 = ЛОЖЬ, также не будет вычислять ЛогВыр2, как и в случае без скобок, т.к. наличие скобок не отменяет следующей за ним последовательности операций.
30 polosov
 
20.01.15
10:29
(29) Проверили уже. Кофейку попей ))
31 extrim-style
 
20.01.15
10:33
(30) я кофе не пью, расслабься
32 Гёдза
 
20.01.15
10:34
в делфи помнится ключ компилятора был. А в 1С всегда короткая логика
33 Vladal
 
20.01.15
11:50
(14) У 7.7 она была "не ленивая". У 8 оптимальная.