Обсуждение статьи "Стать хорошим программистом (Часть 1): избавляемся от пяти привычек, чтобы лучше программировать на MQL5" - страница 2

 
Aliaksandr Hryshyn #:

Интересно...


:)
 
Aliaksandr Hryshyn #:

Интересно...

Стать хорошим программистом (часть 1): избавляемся от пяти привычек, чтобы лучше программировать на MQL5

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

 

всем (и автору статьи тем более) к прочтению обязательно : 97 Things Every Programmer Should Know

GitHub - 97-things/97-things-every-programmer-should-know: Pearls of wisdom for programmers collected from leading practitioners.
GitHub - 97-things/97-things-every-programmer-should-know: Pearls of wisdom for programmers collected from leading practitioners.
  • github.com
Pearls of wisdom for programmers collected from leading practitioners. - GitHub - 97-things/97-things-every-programmer-should-know: Pearls of wisdom for programmers collected from leading practitio...
 
Исходный:
int CountPosByType(ENUM_POSITION_TYPE type)
  {
   int counter = 0;
   for(int i=PositionsTotal(); i>=0; i--)
      if(m_position.SelectByIndex(i))
         if(m_position.Magic()==MagicNumber && m_position.Symbol()==Symbol() && m_position.PositionType()==type)
            { 
                counter++; 
            }
   return counter;
  }

Вариант работающий быстрее и на мой взгляд понятнее:

int PositionsByType(ENUM_POSITION_TYPE type)
  {
   int counter = 0;
   for(int i=PositionsTotal()-1; i>=0; i--)
   {
      if(!m_position.SelectByIndex(i))
         return (INVALID_HANDLE);

      if(m_position.PositionType()!=type ||
         m_position.Magic()!=MagicNumber ||
         m_position.Symbol()!=Symbol())
         continue;

      counter++; 
   }
   return counter;
  }

1. Ошибка в инициализации цикла от количества необходимо отнимать 1, когда делаем обратный перебор.

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

3. Сначала надо проверять переменные bool, далее перечисления ENUM и только после проверять int, double, string, если проверка не удалась то сразу переходить к следующему элементу цикла.

Если делать операции сравнения через &&, то программа будет в обязательном порядке делать проверку каждого условия.

4. Название для функции тоже важно, лучше выглядит PositionsByType, это кажется мелочью, но когда вы заходите использовать эту функцию вам не нужно переходить к библиотеке и ее оглавлению, а достаточно начать вводить стандартное наименование Positions, а у вас будет несколько вариантов вызова PositionsTotal, PositionsByType....

5. Необходимо соблюдать ширину кода, чтобы не использовать горизонтальное пролистывание, так как это сильно снижает читаемость и скорость разработки.


 
По поводу этого вы ошибаетесь:
"Если делать операции сравнения через &&, то программа будет в обязательном порядке делать проверку каждого условия.".
Происходит сравнение по порядку до первого false.
Кстати, ещё в таких ситуациях можно учитывать вероятность невыполнения условия.

 
Aliaksandr Hryshyn #:
По поводу этого вы ошибаетесь:
"Если делать операции сравнения через &&, то программа будет в обязательном порядке делать проверку каждого условия.".
Происходит сравнение по порядку до первого false.
Кстати, ещё в таких ситуациях можно учитывать вероятность невыполнения условия.

Да, Вы меня верно поправили, проверка будет до первого false, главное, чтобы мелкие типы данных были вначале.

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

Этот прием использую во всех своих проектах, прирост в скорости заметный для тестера в режиме оптимизации.

 
Vitaly Muzichenko #:

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

А вы заказчику скажите заранее об этом или деньги важнее