Подскажите. Правильно ли будет работать... - страница 2

 
bool iif( bool condition, boll ifTrue, bool ifFalse )
{
    if( condition ) return( ifTrue );
    
    return( ifFalse );
}

OhYes = iif(x1 == x2, x3 == x4, x5 == x6, x7 == x8, x9 == x10, True, False);

Ошибка однако.

Должно быть в таком случае

OhYes = iif(x1 == x2, iif(x3 == x4,iif( x5 == x6,iif( x7 == x8,iif( x9 == x10, True, False),False),False),False),False);

 
Vinin:
bool iif( bool condition, boll ifTrue, bool ifFalse )
{
    if( condition ) return( ifTrue );
    
    return( ifFalse );
}

OhYes = iif(x1 == x2, x3 == x4, x5 == x6, x7 == x8, x9 == x10, True, False);

Ошибка однако.

Должно быть в таком случае

OhYes = iif(x1 == x2, iif(x3 == x4,iif( x5 == x6,iif( x7 == x8,iif( x9 == x10, True, False),False),False),False),False);

___________________________________________________________________________________________________

да нет, опечатка, надо:

OhYes = iif(x1==x2 && x3==x4 && x5==x6 && x7==x8 && x9==x10, True, False);

С уважением - С.Д.
 

Проблема поднималась раньше. Таких iif() придется делать несколько штук, если типы возвращаемых значений могут быть разными, а не только логическими.

Кроме того, это простейший случай, логика которого очевидна. Для более сложных конструкций выигрыша в читабельности может и не получиться. Хотя, признаться, я и сам избегаю многократной вложенности.

 
Sart:
...
OhYes = iif(x1==x2  &&  x3==x4 && x5==x6 && x7==x8 && x9==x10, True, False);

С уважением - С.Д.

Integer, видимо, пошёл кофе попить. А пока он ходит, сравните варианты по среднему быстродействию!
 
int start(){
int test;
int OhYes1=0;
int OhYes2=0; 
int start1,start2,stop1,stop2;
int x1=1000;
int x2=1000;
int x3=1000;
int x4=1000;
int x5=1000;
int x6=1000;
int x7=1000;
int x8=1000;
int x9=1000;
int x10=1000;
 
start1 = GetTickCount();
for(test=0;test<1000000;test++){
    if(x1==x2){
       if(x3==x4){
          if(x5==x6){
             if(x7==x8){
                if(x9==x10){
                   OhYes1++;
}}}}}}
stop1 = GetTickCount();
Sleep(100);
start2 = GetTickCount();
for(test=0;test<1000000;test++){
  if((x1==x2) && (x3==x4) && (x5==x6) && (x7==x8) && (x9==x10)){
     OhYes2++;
}}
stop2 = GetTickCount();
Comment("Yes1 "+OhYes1+" время1= "+(stop1-start1)+" Yes2 "+OhYes2+" время2= "+(stop2-start2));
 
 
return(0);
}
проигрыш во времени значительный
 
rsi:
Sart:
...
OhYes = iif(x1==x2 && x3==x4 && x5==x6 && x7==x8 && x9==x10, True, False);

С уважением - С.Д.

Integer, видимо, пошёл кофе попить. А пока он ходит, сравните варианты по среднему быстродействию!
_______________________________________________________________________________________________

Вообще-то, по моим, возможно ошибочным представлениям, когда советник висит на графике, то получив управление по тику, ему особо спешить некуда...

если тики приходят по 10-30 штук в минуту....даже по одному тику в секунду. Если он производит чисто вычислительные операции(имею ввиду работу : процессор плюс опер.память),

то для него секунда - это очень много....Поэтому я даже никогда и не задумывался о том успеет ли он все сделать своевременно ....

С уважением - С.Д.



 
Это при том, что все условия выполняются, а если часть из них не выполняется то проигрыш - ещё больше! Поэтому: насчёт лучшей читабельности - спорно, а вот по эффективности - строчек и вложений экономить не стоит (ИМХО)
 
Есть еще вариант решения. Но кнопки перестали работать опять. Получится нечитабельный вариант.
 
Выражения бывают очень длинными, будет неудобно все писать в одну строчку, а если ошибку придется искать - труба. xeon - очень познавательно, что свой if для каждого выражения работает быстрей, чем одно выражение.
 
rsi, строчек экономить точно не стоит, согласен. И на комментариях лучше не экономить. А вот на вложениях лучше сэкономить. Если этот код нужно потом править и отлаживать (т.е. поддерживать), то я всегда выбираю читабельность, пусть ценой проигрыша в скорости. Я это замечаю даже по коду с небольшим числом вложений и короткими функциями, который обычно пишу. Написанное пару месяцев назад перемещается из кратковременной в долговременную память, которая уже совсем не такая быстрая...
Причина обращения: