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

 
Mathemat:
rsi, строчек экономить точно не стоит, согласен. А вот на вложениях лучше сэкономить. Если этот код нужно потом править и отлаживать (т.е. поддерживать), то я всегда выбираю читабельность, пусть ценой проигрыша в скорости. Я это замечаю даже по коду с небольшим числом вложений и короткими функциями, который обычно пишу. Написанное пару месяцев назад перемещается из кратковременной в долговременную память, которая уже совсем не такая быстрая. ..
а я просто пишу больше коментариев :-)
 
Mathemat:
rsi, строчек экономить точно не стоит, согласен. А вот на вложениях лучше сэкономить. Если этот код нужно потом править и отлаживать (т.е. поддерживать), то я всегда выбираю читабельность, пусть ценой проигрыша в скорости. Я это замечаю даже по коду с небольшим числом вложений и короткими функциями, который обычно пишу.  Написанное пару месяцев назад перемещается из кратковременной в долговременную память, которая уже совсем не такая быстрая. ..
На этот случай предусмотрены комментарии... (пока писал - xeon ответил. Спасибо)
 

Ну да, а я подправил свой пост :)

 
Integer:
Выражения бывают очень длинными, будет неудобно все писать в одну строчку, а если ошибку придется искать - труба. xeon - очень познавательно, что свой if для каждого выражения работает быстрей, чем одно выражение.

Вот еще один вариант, более читабельный.
bool OhYes=true;
...
OhYes=OhYes && (x1==x2);
OhYes=OhYes && (x3==x4);
OhYes=OhYes && (x5==x6);
OhYes=OhYes && (x7==x8);
OhYes=OhYes && (x9==x10);
И даже условие не нужно стало. И комментарии можно писать.
 
Vinin писал (а):... И даже условие не нужно стало...
Поэтому этот не очень читабельный (может с непривычки) вариант оказался самым быстрым из трёх. Спасибо. Хотя в среднем, когда не все условия выполняются (а иначе их бы никто не проверял) вариант с вложениями будет быстрее.
 

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

P.S. Интересно, а принудительные скобки в этом примере изменяют производительность? Что-то мне подсказывает, что она будет даже выше...

P.P.S. Эхх, раз уж пошла такая пьянка - вариант Vinin'а можно еще упростить:

bool OhYes=true;
...
OhYes = x1 == x2;
OhYes = x3 == x4;
OhYes = x5 == x6;
OhYes = x7 == x8;
OhYes = x9 == x10;
rsi, xeon, что скажете о производительности - со скобками и без них?
 
Mathemat:

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

P.S. Интересно, а принудительные скобки в этом примере изменяют производительность? Что-то мне подсказывает, что она будет даже выше...

P.P.S. Эхх, раз уж пошла такая пьянка - вариант Vinin можно еще упростить:

bool OhYes=true;
...
OhYes = x1 == x2;
OhYes = x3 == x4;
OhYes = x5 == x6;
OhYes = x7 == x8;
OhYes = x9 == x10;

Не получится. Если последнее условие верное, то предыдущие можно и не проверять. Они никак не повлияют  на результат.
 
Да, точно, Vinin. Но уж из первого "условия" (со сравнением x1 и x2) лишний OhYes можно точно выбросить.
 
Mathemat:
Да, точно, Vinin. Но уж из первого "условия" (со сравнением x1 и x2) лишний OhYes можно точно выбросить.

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

Это вы все, господа, о совершенно простом выражении Integer'a

А как быть в советнике, который реализует более сложную логику, например, такого бинарного дерева:

if (x1>A)
{  if (x2>B)
   {  if (x3>C)
      {  if (x4>D) procedure_1(....);
         else procedure_2(....);
      }
      else
      {  if (x5>E) procedure_3(....);
         else procedure_4(....);
      }
   }
   else
   {  if (x6>F)
      {  if (x7>G) procedure_5(....);
         else procedure_6(....);
      }
      else
      {  if (x8>H) procedure_7(....);
         else procedure_8(....);
      }
   }
}
else
{  if (x9>I)
   {  if (x10>J)
      {  if (x11>K) procedure_9(....);
         else procedure_10(....);
      }
      else
      {  if (x12>L) procedure_11(....);
         else procedure_12(....);
      }
   }
   else
   {  if (x13>M)
      {  if (x14>N) procedure_13(....);
         else procedure_14(....);
      }
      else
      {  if (x15>O) procedure_15(....);
         else procedure_16(....);
      }
   }
}