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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.07.2006, 12:37   #1  
Buba is offline
Buba
Участник
 
90 / 10 (1) +
Регистрация: 24.04.2003
Адрес: Томск
Делюсь опытом (вероятно с этим уже кто-либо сталкивался).

Ниже приведен код, в котором логическая формула E = a && (b || c && d)
(в Axapta 3.0 Professional SP3) вопреки ожиданиям быть TRUE принимает значение FALSE.

И только в таком исполнении E = a && (b || (c && d)) ожидания оправдываются.

Очень мило, особенно если логика ветвистая и от нее зависит не видимость или невидимость кнопок,
а, например, количество и содержание проводок по мудреной операции.

Самое главное - не мудрить!
А также не надеяться на фундаментальные правила.

Код:
static void Job106(Args _args)
{
	boolean a, b, c, d, E;

	a = true;
	b = true;
	c = false;
	d = false;

	E = a && (b || c && d);

	print a;
	print b;
	print c;
	print d;
	print E;
	pause;
}
Старый 27.07.2006, 03:11   #2  
gbelot is offline
gbelot
Участник
 
16 / 10 (1) +
Регистрация: 20.06.2006
I am wondering why you think it is strange. Axapta just executes them in the order, and because '&&' and '||' are basically equal, they get executed like this:

1. B || C returns 'true'
2. 'true' && D returns 'false', because D is false
3. A && 'false' returns false.

As a good practice we always are trying to reinforce the expected order of operations with parenteses.
Старый 27.07.2006, 06:07   #3  
Buba is offline
Buba
Участник
 
90 / 10 (1) +
Регистрация: 24.04.2003
Адрес: Томск
Нет возражений, однако это первый язык в моей практике, в котором операции OR и AND имеют один и тот же приоритет.
Старый 27.07.2006, 10:35   #4  
Ser_imported is offline
Ser_imported
Участник
 
5 / 10 (1) +
Регистрация: 20.11.2003
к сожалению, это так..
Microsoft Axapta Developer's Guide \ Operators and Expressions \ Operator precedence

Цитата:
logical operators (AND, OR)


&& and ||
In X++, && (logical AND) and || (logical OR) have the same precedence and are evaluated from left to right.

This means that

0&&0||1 == 1 while

1||0&&0 == 0
Старый 09.11.2006, 00:32   #5  
yanik84 is offline
yanik84
Участник
 
3 / 10 (1) +
Регистрация: 09.11.2006
это тоже самое что и с++
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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