Показать сообщение отдельно
Старый 15.04.2009, 11:20   #1  
cerbo is offline
cerbo
Участник
 
25 / 11 (1) +
Регистрация: 02.10.2008
! Будьте осторожны со сложными условиями
Неявное преобразование происходит не только из int в boolean, но и наоборот:
X++:
    int d= 10;
    boolean t= false;
    ;

    t= d == (5 || 10);  // false    
    t= d == (5 && 10);  // false
    d= t;               // 0
Проблема в том, что компилятор пропускает такое без звука в отличии от, например, C++ или C#. В сложном условии легко что-то не заметить и потом потратить очень много времени на отладку, как это произошло со мной . MSSQL ведет себя так же (про других врать не буду), а т.к. у нас один и тот же логический аппарат используется и во встроеных запросах и в простых расчетах, то может от сюда ноги ростут?

К стати первая строчка могла бы стать элегантной заменой этому:
X++:
    t= (d == 5 || d == 10); // true
__________________
Dynamics AX 4.0.2501.122 SP2, kernel 4.0.2163.0, MS SQL 2005