Имя: Пароль:
1C
 
Почему работает выражение
,
0 iceman2112
 
07.02.17
18:45
Часто видел такую конструкцию, но все руки не доходили разобраться.

МассивСтрок = Неопределено;

Если МассивСтрок <> Неопределено И МассивСтрок.Найти(Выборка.НомерСтроки) = Неопределено Тогда
                    Продолжить;
                КонецЕсли;
Почему она работает? Он вычисляет первое выражение, оно ложь и т.к. И он дальше не вычисляет?
1 Господин ПЖ
 
07.02.17
18:46
условия короткозамкнутые
2 Господин ПЖ
 
07.02.17
18:47
вы бы мануал полистали, прежде чем хавнокодить...
3 iceman2112
 
07.02.17
18:50
(2) Спасибо 1с за широкодоступные мануалы
4 Господин ПЖ
 
07.02.17
18:58
это в каждой книжке есть. типа радченко
5 iceman2112
 
07.02.17
19:00
(4) Даже в гугле этого нет. Простые вещи, а про такую конструкцию
6 iceman2112
 
07.02.17
19:00
Может я правда какую нибудь пару прогулял еще в универе
7 iceman2112
 
07.02.17
19:01
Если МассивСтрок <> Неопределено И (МассивСтрок.Найти(Выборка.НомерСтроки) = Неопределено) Тогда

Даже если вот так пишу, все равно работает

(1) По этому запросу, выдает двигатели какие то
8 Господин ПЖ
 
07.02.17
19:06
>Даже в гугле этого нет

товарищ, у вас в руках мухи ипутся...

читайте радченко
9 Жан Пердежон
 
07.02.17
19:09
(7) сокращенная логика, есть чуть ли в не любом яп; да и в школе информатику прогуливать не следовало бы.

А и Б   - если А - ложь, нет смысла вычислять Б;
А или Б - если А - истина, нет смысла вычислять Б;
10 iceman2112
 
08.02.17
08:43
(8) не трать свое время, иди чаю попей лучше

(9) То что не смыслы вычислять Б я понял. Вопрос был
работает 1с?
11 iceman2112
 
08.02.17
08:44
Короче ясно, на интуитивном уровне
12 iceman2112
 
08.02.17
08:55
Я думал, что ЯП вычисляют выражения отдельно, а потом считают, что получилось. Позже я стал встречать конструкции, подобные выше и в других ЯП, но нигде не видел про это описание. Т.е. интуитивно понятно, что он не вычисляет соседнюю конструкцию, мне нужно было подтверждение для сдвига парадигмы
13 apokrit
 
08.02.17
08:57
(0)
из описания встроенного языка
(см. https://its.1c.ru/db/v839doc/bookmark/dev/TI000000145)

...
Логические выражения вычисляются слева направо.
...
При вычислении логического выражения вычисляются только необходимые части выражения. Например, в выражении (Цена > 0) И ПроверкаСуммы(), если Цена <= 0, функция ПроверкаСуммы() не вызывается.
...
14 iceman2112
 
08.02.17
08:58
(12) Спасибо 1с за широкодоступные мануалы
15 iceman2112
 
08.02.17
09:01
(13) Спасибо
16 ptiz
 
08.02.17
09:02
(12) " вычисляют выражения отдельно, а потом считают, что получилось" - так было в 7.7
17 iceman2112
 
08.02.17
09:05
(12) Ну вот, и еще в некоторых ЯП наверное, типо Pascal или C++. Оттуда у меня это и отложилось наверное
18 Рэйв
 
08.02.17
09:18
(17)Это потому что там вычисления ведутся справа налево
19 Naf2017
 
08.02.17
09:19
(17) в турбо паскале поведение изменяется директивами компиляции по коду
в С++ есть разные операторы: && || против & |
20 Naf2017
 
08.02.17
09:19
(18) это ты сейчас обоснуешь?
21 iceman2112
 
08.02.17
09:20
(18) Ну вот и разобрались с вопросом. Всем спасибо
22 apokrit
 
08.02.17
09:20
(17) В С++ - нет (обычно нет)
См. например:
https://en.wikipedia.org/wiki/Short-circuit_evaluation
Ошибка? Это не ошибка, это системная функция.