AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 09.06.2004, 14:05   #1  
alexbn is offline
alexbn
Участник
 
46 / 11 (1) +
Join Date: 23.04.2004
Ассоциативность операции &&
Честно... лень проверять просто, На вскидку, кто может сказать порядок выполнения операции "&&":

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

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

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

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

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

Quote:
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.
Old 10.06.2004, 15:15   #5  
alexbn is offline
alexbn
Участник
 
46 / 11 (1) +
Join Date: 23.04.2004
Ну дык - в плюсах при & отработают обе стороны
а в Ахапте только одна (если она конечно сразу же 0)

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

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

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Параллельные операции в маршрутах 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

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 11:25.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.