|
![]() |
#1 |
Участник
|
У варианта "г" будет особенность, что оба выражения будут вычисляться (выполняться) в любом случае, в отличие от тернарного оператора.
Помимо оптимизации это не всегда допустимо. |
|
|
За это сообщение автора поблагодарили: Logger (3). |
![]() |
#2 |
Участник
|
Цитата:
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 |
|
![]() |
#3 |
Участник
|
не подойдет.
Тернарный оператор это выражение. 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). |
![]() |
#4 |
Участник
|
Цитата:
![]() 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, тернарный оператор |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|