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

 
fxsaber #:

<Alt+G> работает и для IsStopped, и для OrderSend. Поэтому при чтении исходника не составляет труда выяснить, что имеено вызывается.

 
Vladislav Boyko #:
Если вы работаете в ооп парадигме, то и работайте в ней полностью, а не "тут немного ооп, а там немного переменных в global scope лежит".
class A
{
  int Value;
  
public:
  A() : Value(0)
  {
    int Pos = 0;
    
    // Какой-то код.
    
    Pos = 1;   // Pos - локальная переменная или член класса?
    Value = 1; // Value - локальная переменная или член класса?
    this.Value = 1; // Value - локальная переменная или член класса?
  }  
};

Вообще не понимаю, зачем поднимается ООП-тема в данном вопросе. Здесь от ООП 1%.

 
Vladislav Boyko #:

<Alt+G> работает и для IsStopped, и для OrderSend. Поэтому при чтении исходника не составляет труда выяснить, что имеено вызывается.

Каждый раз, когда видите OrderSend, делаете ALT+G? Ну так, на всякий случай, мало ли это метод, а не штатная функия, которая даже подсвечивается в ME, как штатная.

 
fxsaber #:

Вообще не понимаю, зачем поднимается ООП-тема в данном вопросе. Здесь от ООП 1%.

Возможно это имеет смысл если описание объекта длинное. Лично я в таком случае обычно сделал бы вот так:

class A
{
  int m_value;

Хотя слышал критику и в сторону такой практики. Не знаю, как правильнее/лучше.

fxsaber #:

Каждый раз, когда видите OrderSend, делаете ALT+G? Ну так, на всякий случай, мало ли это метод, а не штатная функия, которая даже подсвечивается в ME, как штатная.

Я не часто читаю чужой код, а когда читаю, то прожал бы <Alt+G> на фиолетовых функциях. В своем коде я бы не назвал свой метод именем встроенного.
 
Maxim Kuznetsov #:
если вы употребляете this, то делаете что-то не то и не так
Стоп. Началось же про неоднозначность IsStoped.

Так вот, нафига IsStoped среди методов класса? А если он среди методов класса, то какого фига вызов не через this?

По-моему, эти вопросы очень уместны.
 
Vladislav Boyko #:

<Alt+G> работает и для IsStopped, и для OrderSend. Поэтому при чтении исходника не составляет труда выяснить, что имеено вызывается.

Код должен читаться бегло, а не через спотыкания.
 
Vladislav Boyko #:

А для чего он нужен (this)?

Если есть метод-член с таким-же идентификатором, то будет вызван именно он; если члена с таким идентификатором нет, то будет вызвана функция из global scope. Что вам дает this?

Для читабельности.
 
Мне тоже не нравится и IsStopped, и OrderSend, но я бы придрался к названию метода, а не к отсутствию this. Наверное проблема в том, что нет договоренностей о code style, так как нет командной разработки. Думаю, такие вещи должны быть прописаны в code style
 
fxsaber #:

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

Доказательство.

Forum on trading, automated trading systems and testing trading strategies

Delete pending orders on deInit

fxsaber, 2025.02.11 12:47

input long inpMagicEA = 0;

#include <Trade\Trade.mqh>

class CTrade2 : public CTrade
{
public:
  bool OrderDelete(const ulong ticket)
    {
  //--- check stopped
  //   if(IsStopped(__FUNCTION__))
  //      return(false);
  //--- clean
     ClearStructures();
  //--- setting request
     m_request.action    =TRADE_ACTION_REMOVE;
     m_request.magic     =m_magic;
     m_request.order     =ticket;
  //--- action and return the result
     return(OrderSend(m_request,m_result));
    }  
};

CTrade2 trade;

void OnDeinit( const int reason )
{
  trade.SetAsyncMode(true);

  for (int i = OrdersTotal() - 1; i >= 0; i--)
    if (OrderGetTicket(i) && (OrderGetInteger(ORDER_MAGIC) == inpMagicEA) && (OrderGetString(ORDER_SYMBOL) == _Symbol))
      trade.OrderDelete(OrderGetInteger(ORDER_TICKET));
}

Чтобы иметь возможность удалить ордера в OnDeinit, требуется использовать наследование (причем без виртуальности, а тупо перегрузкой).

Aleksandr Slavskii #:

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

 
fxsaber #:
причем без виртуальности, а тупо перегрузкой

По-моему, в виртуализации что-то сломалось.

Отправил в личку тестовый код.