26.07.2006, 12:37 | #1 |
Участник
|
Делюсь опытом (вероятно с этим уже кто-либо сталкивался).
Ниже приведен код, в котором логическая формула 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 |
Участник
|
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 |
Участник
|
Нет возражений, однако это первый язык в моей практике, в котором операции OR и AND имеют один и тот же приоритет.
|
|
27.07.2006, 10:35 | #4 |
Участник
|
к сожалению, это так..
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 |
Участник
|
это тоже самое что и с++
|
|