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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.12.2020, 22:31   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,889 / 3165 (113) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
4-й вопрос. - Кто как обходит такое поведение компилятора?
пока вижу такие способы
а. Отказаться от тернарного оператора в случае когда выдает ругань.
б. Использовать any2XXX функции, дописав недостающие самим в global классе. Есть ли в этом какой то риск в случае CIL ?
в. Забить на предупреждения компилятора (а как их тогда подавить корректно ? Грубые хаки в виде кода на insert / write методах таблицы TmpCompilerOutput c запретом вставки записи - я не считаю. Это крайний вариант)
г. ...

5-й вопрос - как с этим обстоит дело в 365-й ?

Последний раз редактировалось Logger; 20.12.2020 в 22:51.
Старый 30.08.2023, 16:27   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,889 / 3165 (113) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Logger Посмотреть сообщение
4-й вопрос. - Кто как обходит такое поведение компилятора?
пока вижу такие способы
а. Отказаться от тернарного оператора в случае когда выдает ругань.
б. Использовать any2XXX функции, дописав недостающие самим в global классе. Есть ли в этом какой то риск в случае CIL ?
в. Забить на предупреждения компилятора (а как их тогда подавить корректно ? Грубые хаки в виде кода на insert / write методах таблицы TmpCompilerOutput c запретом вставки записи - я не считаю. Это крайний вариант)
г. ...
вариант г.
сделать в Global метод
X++:
public static anytype tern(boolean _useFirst, anytype _parmFirstValue, anytype _parmSecondValue)
{
    ;

    if (_useFirst)
    {
        return _parmFirstValue;
    }
    
    return _parmSecondValue;
}
и использовать его вместо тернарного оператора.


Такой ли уж это г. способ ?
Старый 30.08.2023, 17:33   #3  
ТРЕНЕР is offline
ТРЕНЕР
Участник
Аватар для ТРЕНЕР
 
598 / 50 (3) ++++
Регистрация: 11.06.2003
Адрес: Москва
Забить на Микрософт.
Также как Микрософт забил на нас.
Старый 30.08.2023, 17:34   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,889 / 3165 (113) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от ТРЕНЕР Посмотреть сообщение
Забить на Микрософт.
Также как Микрософт забил на нас.
Собственно речь о том как лучше это сделать.
Так как способ г. это один из вариантов как забить.
Старый 30.08.2023, 17:47   #5  
dit31 is offline
dit31
Участник
 
12 / 13 (1) ++
Регистрация: 16.01.2015
У варианта "г" будет особенность, что оба выражения будут вычисляться (выполняться) в любом случае, в отличие от тернарного оператора.
Помимо оптимизации это не всегда допустимо.
За это сообщение автора поблагодарили: Logger (3).
Старый 29.09.2023, 17:37   #6  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
Цитата:
Сообщение от dit31 Посмотреть сообщение
У варианта "г" будет особенность, что оба выражения будут вычисляться (выполняться) в любом случае, в отличие от тернарного оператора.
Помимо оптимизации это не всегда допустимо.
Макрос?
X++:
static void tern_macro_test(Args _args)
{
    #localmacro.tern
    if (%2)
    {
        %1 = %3;
    }
    else
    {
        %1 = %4;
    }
    #endmacro
    
    anytype value, firstValue, secondValue;
    boolean useFirst;
    ;

    useFirst = true;
    firstValue = 1;
    secondValue = 2;

    #tern(value, useFirst, firstValue, secondValue)

    info(strfmt("%1", value));
}
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
Старый 29.09.2023, 18:08   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,889 / 3165 (113) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от ivas Посмотреть сообщение
Макрос?
не подойдет.
Тернарный оператор это выражение.

X++:
info(callfunc1() ? callfunc1() : callfunc2());
не скомпилируется. Уже лучше что-то типа такого

X++:
#localmacro.tern
    %1 ? any2any(%1) : any2any(%2)
#endmacro
где
X++:
public static anytype any2any(anytype _value)
{
    return _value;
}
тогда
X++:
private void method1()
{
    int     a;
    anytype b = "";
    ;
    
    info(strFmt("%1", (a ? a : b))); // выдает предупреждение
    info(strFmt("%1", (a ? any2any(a) : any2any(b)))); // не выдает
    info(strFmt("%1", (#tern(a, b)))); // не выдает
}
но я сам так не делал.
За это сообщение автора поблагодарили: ivas (3).
Старый 29.09.2023, 18:32   #8  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
Цитата:
Сообщение от Logger Посмотреть сообщение
не подойдет.
Тернарный оператор это выражение.

X++:
#localmacro.tern
    %1 ? any2any(%1) : any2any(%2)
#endmacro

    info(strFmt("%1", (#tern(a, b)))); // не выдает
но я сам так не делал.
Это можно объединить в один макрос
X++:
static void tern_macro_test(Args _args)
{
    #localmacro.tern
    #if.empty(%4)
        %1 ? %2 : %3
    #endif
    #ifnot.empty(%4)
        if (%2)
        {
            %1 = %3;
        }
        else
        {
            %1 = %4;
        }
    #endif
    #endmacro

    anytype value, firstValue, secondValue;
    boolean useFirst;
    ;

    useFirst = true;
    firstValue = 1;
    secondValue = 2;
    info(strfmt("%1", #tern(useFirst, firstValue, secondValue)));

    useFirst = false;
    #tern(value, useFirst, firstValue, secondValue)
    info(strfmt("%1", value));
}
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
Теги
ax2012, ax2012r3, тернарный оператор

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX2012: базовые типы и результаты операторов div и mod отличаются в X++ и в CIL gl00mie DAX: Программирование 0 25.09.2014 11:13
Ax3 - Модуль Учет затрат egorych DAX: Функционал 15 12.12.2013 17:58
emeadaxsupport: Inventory closing differences between AX4.0 and AX2012 using weighted average costing method Blog bot DAX Blogs 0 27.12.2012 19:11
роли, типы пользователей и лицензирование AX2012 wojzeh DAX: Администрирование 1 22.07.2011 23:50
Date Daido DAX: Программирование 6 28.09.2007 11:05

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:36.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.