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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.04.2009, 12:22   #1  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Условия
X++:
t= d == (5 || 10); // false
и
X++:
t= (d == 5 || d == 10); // true
Отличаются далеко не элегантностью, а принципиальностью. В обоих случаях сис-ма посчитала логически правильно. Разберите выражения внимательно.

Во избежание получения результата, отличного от ожидаемого, в подобных случаях можно использовать более читабельные конструкции, например:

X++:
if (d == 5 || d == 10)
 t = true;
Чуть длинее, за то понятнее.

Последний раз редактировалось DSPIC; 15.04.2009 в 12:27.
Старый 15.04.2009, 12:45   #2  
cerbo is offline
cerbo
Участник
 
25 / 11 (1) +
Регистрация: 02.10.2008
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Условия
X++:
t= d == (5 || 10); // false
и
X++:
t= (d == 5 || d == 10); // true
Отличаются далеко не элегантностью, а принципиальностью. В обоих случаях сис-ма посчитала логически правильно. Разберите выражения внимательно.

Во избежание получения результата, отличного от ожидаемого, в подобных случаях можно использовать более читабельные конструкции, например:

X++:
if (d == 5 || d == 10)
 t = true;
Чуть длинее, за то понятнее.
Я думаю красота этого:
X++:
t= d == (5 || 10);
перевешивает приимущества неявных преобразований.

И назидательный тон ваш совсем не уместен, эти примеры я сам написал и поэтому хорошо знаю и понимаю что в них написано.
__________________
Dynamics AX 4.0.2501.122 SP2, kernel 4.0.2163.0, MS SQL 2005

Последний раз редактировалось cerbo; 15.04.2009 в 12:46. Причина: очепятка
Старый 15.04.2009, 13:00   #3  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от cerbo Посмотреть сообщение
Я думаю красота этого:
X++:
t= d == (5 || 10);
перевешивает приимущества неявных преобразований.

И назидательный тон ваш совсем не уместен, эти примеры я сам написал и поэтому хорошо знаю и понимаю что в них написано.
определитие семантику || и == которая будет поддерживать это?
Это какая-то PHP-красота

Лучше как в питогне

X++:
t = d in [5, 10]
Можно сделать функцию in типа:
X++:
boolean in(AnyType _value, container _container)
{
     return conFind(_container, _value) ? true : false;
}

t = in(d, [5, 10]);

А неявное преобразование сделано для проверки непутоты

X++:
if (table1.Qty1 ||  table1.Qty2)
{
     ....
}
else
{
   warning("No qty!!!")
}
Старый 15.04.2009, 14:06   #4  
cerbo is offline
cerbo
Участник
 
25 / 11 (1) +
Регистрация: 02.10.2008
Цитата:
Сообщение от belugin Посмотреть сообщение
А неявное преобразование сделано для проверки непутоты

X++:
if (table1.Qty1 ||  table1.Qty2)
{
     ....
}
else
{
   warning("No qty!!!")
}
А зачем тогда нужно из boolean в int?
__________________
Dynamics AX 4.0.2501.122 SP2, kernel 4.0.2163.0, MS SQL 2005
Старый 15.04.2009, 14:41   #5  
tourist is offline
tourist
Участник
 
21 / 14 (1) ++
Регистрация: 03.05.2006
Цитата:
Сообщение от cerbo Посмотреть сообщение
А зачем тогда нужно из boolean в int?
Например, чтобы присваивать значение выражения типа boolean полю с типом NoYes
Старый 15.04.2009, 15:11   #6  
leva is offline
leva
Участник
 
52 / 36 (2) +++
Регистрация: 03.08.2005
Цитата:
Сообщение от tourist Посмотреть сообщение
Например, чтобы присваивать значение выражения типа boolean полю с типом NoYes
Да. И мне кажется других реальных потребностей нет.

Соответсвенно в аксапте на самом деле true преобразовывается в 1, а false в 0. Поэтому собственно код автора выдавал false, ибо 10 не равно 1.

Лично я всё равно избегаю таких неявных преобразований ибо от лукавого
Старый 15.04.2009, 16:21   #7  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от leva Посмотреть сообщение
И мне кажется других реальных потребностей нет.
Еще если, например, надо, чтобы из трех условий было выполнено два, то можно делать так:
X++:
if (((a>b) + (a>c) + (a>d)) == 2)
{
    ...
}
Старый 15.04.2009, 13:11   #8  
leva is offline
leva
Участник
 
52 / 36 (2) +++
Регистрация: 03.08.2005
Да какая красота и элегантность?

Ну и какому числу должно быть равно булевское значение после преобразования в int? 1? 5? -1? "Элегантно" заглядывать в документацию каждый раз как встретишь (если это там вообще определено)? Надеятся, что в следующей версии компилятора эту "красоту" не испорятят?

Для справки:
1. В С и С++ нет булевского типа. Есть понятие "0 "и "не 0", со всеми вытекающими.
2. В Java такие трюки вообще запрещены. И правильно.

В одном вы правы - надо быть осторожней и НЕ использовать такие финты.
Старый 15.04.2009, 16:11   #9  
cerbo is offline
cerbo
Участник
 
25 / 11 (1) +
Регистрация: 02.10.2008
Цитата:
Сообщение от leva Посмотреть сообщение
Для справки:
1. В С и С++ нет булевского типа. Есть понятие "0 "и "не 0", со всеми вытекающими.
Для справки, в C++ есть тип bool
__________________
Dynamics AX 4.0.2501.122 SP2, kernel 4.0.2163.0, MS SQL 2005
Старый 15.04.2009, 13:42   #10  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от cerbo Посмотреть сообщение
Я думаю красота этого:
X++:
t= d == (5 || 10);
перевешивает приимущества неявных преобразований.

И назидательный тон ваш совсем не уместен, эти примеры я сам написал и поэтому хорошо знаю и понимаю что в них написано.
Простите, больше не повторится.
Теги
неявное преобразование

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Будьте осторожны с RecordInsertList miklenew DAX: Программирование 6 20.05.2008 15:39
баг в 2.5. Будьте осторожнее с символом "_" подчеркивание levsha DAX: Программирование 5 07.12.2004 12:26
Заказы-склад комплектация AK-76 DAX: Функционал 2 05.11.2003 10:37
И еще раз о слоях PlasticinE DAX: Программирование 2 22.01.2002 22:44
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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