AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.06.2004, 14:05   #1  
alexbn is offline
alexbn
Участник
 
46 / 11 (1) +
Регистрация: 23.04.2004
Ассоциативность операции &&
Честно... лень проверять просто, На вскидку, кто может сказать порядок выполнения операции "&&":

if (this.somef1() && this.somef2())
{
....
}

Если this.somef1() == false будет ли выполняться this.somef2() ?
Смысла в выполнении явно нет (а в некоторых моментах есть!).

сорри за тривиальный вопрос
щас сам проверю....
Старый 09.06.2004, 14:08   #2  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
нет, не будет
Старый 09.06.2004, 14:26   #3  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Смысла в выполнении явно нет (а в некоторых моментах есть!).
Насколько я понимаю, все таки нет

Идея в том, нужно разделять функции, которые выполняют какую-то работу activity и функции предназначенные для проверки каких-то условий condition.
Это не закон, но рекомендация, следование которой позволит избежать многих ошибок.
Например, код в somef2() не был выполнен, так как так решил оптимизатор.
Например, кто-то решил дважды дернуть somef2(), чтобы выполнить какую-то проверку и при этом неосознанно выполнил код вложенный в somef2().

Насколько я помню даже в стандарте C++ не описано поведение компилятора в данном случае и каждый производитель может делать своб реализацию данного поведения. Это приведет к тому, что ваш код будет работать по разному, будучи откомпилированным разными компиляторами. Или даже откомпилированным в разных режимах - debug и release mode.
Старый 09.06.2004, 15:11   #4  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Насколько я помню даже в стандарте C++ не описано поведение компилятора в данном случае....
Нет. Здесь я уже поспешил. Все-таки определено :

Цитата:
5.14 Logical AND operator [expr.log.and]

1 logical-and-expression:
inclusive-or-expression
logical-and-expression && inclusive-or-expression
The && operator groups left-to-right. The operands are both implic-
itly converted to type bool (_conv_). The result is true if both
operands are true and false otherwise. Unlike &, && guarantees left-
to-right evaluation: the second operand is not evaluated if the first
operand is false.

2 The result is a bool. All side effects of the first expression except
for destruction of temporaries (_class.temporary_) happen before the
second expression is evaluated.
Старый 10.06.2004, 15:15   #5  
alexbn is offline
alexbn
Участник
 
46 / 11 (1) +
Регистрация: 23.04.2004
Ну дык - в плюсах при & отработают обе стороны
а в Ахапте только одна (если она конечно сразу же 0)

Мне было надо чтоб сработали обе.
И стало интересно если ли подобная функция тут .
Старый 10.06.2004, 15:22   #6  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Ну дык - в плюсах при & отработают обе стороны
Нет - плюсах отработает только одна функция.
Более того, я привел пункт стандарта который четко оговаривает такое поведение.
Стандарт можно почитать вот здесь http://ra.dkuug.dk/jtc1/sc22/open/n2356/
Старый 10.06.2004, 15:24   #7  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Мне было надо чтоб сработали обе.
Сделайте так:

PHP код:
this.somef1();
this.somef2();
if (
&& b)  {  ....  } 
Хотя, повторюсь, данное требование является следствием неправильного проектирования.
Старый 10.06.2004, 16:45   #8  
olesh is offline
olesh
Участник
 
58 / 26 (1) +++
Регистрация: 02.04.2002
Адрес: Москва
Чтобы сработали обе стороны, можно использовать оператор &, а не &&.
Т.е.
if (this.somef1() & this.somef2())
{
....
}
Старый 10.06.2004, 17:05   #9  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
А откуда это ? В "Руководстве разработчика" про это ни слова.
Старый 10.06.2004, 17:18   #10  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
& - это побитовое "и".
Прикольно, но действительно с ним наблюдается другое поведение, чем с логическим "и" (&&)
Правда здесь возможны интересные эффекты, если сравниваются не boolean, а целые.
Например 2&1 = 0
Теги
x++

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Параллельные операции в маршрутах Sanya DAX: Функционал 10 26.04.2007 00:41
Как для ГК операции в LedgerTrans найти соответствующую операцию в VendTrans? romulis DAX: Программирование 20 29.08.2006 14:10
ОС: Опреации & модели учета ax_f DAX: Функционал 2 22.11.2004 10:31

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:09.