Ошибки, баги, вопросы - страница 3615

 
Нафига так писать?!

Forum on trading, automated trading systems and testing trading strategies

IsStopped(__FUNCTION__) error why?

wk.Kun, 2021.11.02 13:17

IsStopped(__FUNCTION__) Normal after comment.
bool CTrade::PositionModify(const ulong ticket,const double sl,const double tp)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- check position existence
   if(!PositionSelectByTicket(ticket))
      return(false);
//--- clean
   ClearStructures();
//--- setting request
   m_request.action  =TRADE_ACTION_SLTP;
   m_request.position=ticket;
   m_request.symbol  =PositionGetString(POSITION_SYMBOL);
   m_request.magic   =m_magic;
   m_request.sl      =sl;
   m_request.tp      =tp;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

Что мешало написать this? Потенциальные же ошибки при копи-пасте и при чтении кода.


В Учебнике только в четырех файлах содержится вызов через this. На чем экономим и ради чего?

Include\MQL5Book\CustomSymbolMonitor.mqh
Include\MQL5Book\toyjson.mqh
Include\MQL5Book\TradeBaseMonitor.mqh
Include\MQL5Book\ws\wsmessage.mqh
Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 7
Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 7
  • www.mql5.com
В заключительной седьмой части книги рассматриваются расширенные возможности MQL5 API, которые пригодятся при разработке программ для MetaTrader 5. Некоторые из них — пользовательские финансовые инструменты и встроенный экономический календарь, а другие — универсальные технологии, такие как сетевые функции, базы данных и криптография.
 
fxsaber #:
Нафига так писать?!

Что мешало написать this? Потенциальные же ошибки при копи-пасте и при чтении кода.

CTrade, один из не многих классов, который можно использовать без знаний ООП. А всё потому, что написан нормально, а не через  this.

 
Aleksandr Slavskii #:

CTrade, один из не многих классов, который можно использовать без знаний ООП. А всё потому, что написан нормально, а не через  this.

bool CTrade::PositionModify(const ulong ticket,const double sl,const double tp)
  {
//--- check stopped
   if(this.IsStopped(__FUNCTION__))

Знания ООП требуются для прочтения? Не возникает вопрос, почему IsStopped содержит входной параметр?


А ниже же полное понимание, что вызывается, правда?

return(OrderSend(m_request,m_result));


Многим приходит в голову при виде такого вызова OrderSend нажать ALT+G?

 
fxsaber #:

Знания ООП требуются для прочтения? Не возникает вопрос, почему IsStopped содержит входной параметр?

if(IsStopped(__FUNCTION__))

Вот это мне понятно, то что написали вы, не понятно. Вопроса не возникает.

Возможно я бы сделал по другому, но так как сделано тоже норм. 

Я не знаю, что такое  this.

Но самое главное, я не понимаю нафик оно нужно там где можно обойтись без него.

 
fxsaber #:

Знания ООП требуются для прочтения? Не возникает вопрос, почему IsStopped содержит входной параметр?


А ниже же полное понимание, что вызывается, правда?

на самом деле возникает вопрос, с какого бодуна IsStopped требует квалификации скопа, он что может быть виртуальным ?

то есть производный класс может решить что он нифига не stopped, а очень даже ready ??

 
Aleksandr Slavskii #:

нафик оно нужно там где можно обойтись без него.

Чтобы была однозначность при чтении кода и не возникали потенциальные ошибки.

Здесь не требуется знаний ООП. Аналогично, с const.


Когда читаешь такое,

void Func( const string &Array[] )

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


Ну и слово override, но здесь уже требуется знание ООП и опыт обжиганий в виде долгого поиска слома выполнения кода. А если бы использовался (там, где работает и без него) override, то не было бы долгого поиска, а сразу бы стало понятна причина, что произошло.

 
Maxim Kuznetsov #:

на самом деле возникает вопрос, с какого бодуна IsStopped требует квалификации скопа, он что может быть виртуальным ?

this нужен не для виртуальности, а для однозначности и понимания, что и откуда вызывается.

 
fxsaber #:

this нужен не для виртуальности, а для однозначности и понимания, что и откуда вызывается.

если вы употребляете this, то делаете что-то не то и не так
 
Aleksandr Slavskii #:

CTrade, один из не многих классов, который можно использовать без знаний ООП. А всё потому, что написан нормально, а не через  this.

Что значит «без знаний ООП». Вы имеете ввиду, абсолютное непонимание? Смею вас разочаровать. При абсолютном непонимании ООП можно написать разве-что trade.buy(0.01) и более ничего… Даже размер контракта увеличивать опасно…

 
Maxim Kuznetsov #:
если вы употребляете this, то делаете что-то не то и не так

Для меня загадка, почему бытует такое мнение.