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

 
fxsaber #:

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

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

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

 
С членами (переменными/объектами) все тоже очень просто. Если вы работаете в ооп парадигме, то и работайте в ней полностью, а не "тут немного ооп, а там немного переменных в global scope лежит". У меня global scope пустой всегда (там либо единственный объект CAdvisor, либо единственный объект CIndicator), поэтому я не боюсь, что я изменю 'член класса/локальную переменную' вместо 'переменной в глобальной области' или наоборот.
 
Vladislav Boyko #:

Что вам дает this?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2025.02.10 15:55

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

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2025.02.10 15:43

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 #:

<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?

Для читабельности.