Новая версия платформы MetaTrader 5 build 3320: Улучшения и исправления - страница 15

 
Andrey Dik #:

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

Однако, это код от MQ без каких-либо warnings. Явная неоднозначность.

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

Новая версия платформы MetaTrader 5 build 3320: Улучшения и исправления

Renat Fatkhullin, 2022.08.03 06:40

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

С this вы продемонстрировали осознанный самострел с последующим корявым исправлением, не говоря уже о тотальном замусоривании кода.

 
Andrey Dik #:

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

Для класса обертки над системными функциями, когда метод класса прямо похож на системную функцию - это разумно (обертка должна как можно ближе быть к сути) и осознанно.

Внутри функци область видимости правильно указана:

bool CTrade::OrderSend(const MqlTradeRequest &request,MqlTradeResult &result)
  {
   bool   res;
   string action="";
   string fmt   ="";
//--- action
   if(m_async_mode)
      res=::OrderSendAsync(request,result);
   else
      res=::OrderSend(request,result);
 
Renat Fatkhullin #:

Внутри функци область видимости правильно указана:

Автор этого кода просто не хотел попасть в рекурсию, поэтому написал через "замусоривание". Очевидно же, что ответ на этот вопрос

 
fxsaber #:

Однако, это код от MQ без каких-либо warnings. Явная неоднозначность.

Никакой неоднозначности нет ни по какому критерию.

Класс-обертка выполняет то, что задумано в рамках своей области видимости.

 
Andrey Dik #:

Это системная функция языка. Считаю, что переназначать системные функции/константы очень плохая идея мягко говоря, а грубо говоря - высшая степень садомазохизма)) А Вы любитель дефайнить всё что дефайниться и даже что не дифайнется тоже умудряетесь.)

А как вам это из того-же файла библиотеки

 
fxsaber #:

Автор этого кода просто не хотел попасть в рекурсию, поэтому написал через "замусоривание". Очевидно же, что ответ на этот вопрос

- НЕТ!

Не учите профессионалов, пожалуйста.

Что вызывается, легко узнать навигатором по коду. Не придумывайте проблем там, где их нет.

 
Renat Fatkhullin #:

Никакой неоднозначности нет ни по какому критерию.

С точки зрения компилятора - да. Но это не мои слова.

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

Новая версия платформы MetaTrader 5 build 3320: Улучшения и исправления

Renat Fatkhullin, 2022.08.03 06:40

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

Заложена потенциальная проблема лишь по той причине, чтобы не писать this.

 
fxsaber #:

Выше дали ссылку на обсуждение трехлетней давности. Прочел - понравилось объяснение. Приведу его здесь.

Выделил цветом причину обязательного "замусоривания" кода. В кодобазе такой "замусоренный" код и выкладываю. Мне он значительно понятнее при чтении, чем СБ.


Например, вот читаю кусок штатного файла MQL5\Include\Trade\Trade.mqh:

Можете понять при чтении, что за OrderSend вызывается?


Я же не считаю, что замусоривание есть абсолютное зло. Я только отметил, что "this." замусоривает сильнее чем "m_", и уж тем более сильнее чем "m".

И Вы, как я понимаю, не команда, а одиночка. Вы пишите так, как понятнее Вам и это правильно. Но я встречал где-то кусок Вашего весьма запутанного кода (что-то было с условиями и/или логическими операциями) и, вроде, Ваш комментарий, что Вы не помните, почему так, но код был когда-то отлажен и он рабочий. И вот это я считаю неправильным, потому что код должен быть читаем по крайней мере разработчиком этого кода.
 
Renat Fatkhullin #:

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

Главное, не забывать на "штатных" функциях в ME нажимать ALT+G. Ну а мало ли это нештатная функция...

При чтении же в Web или в других редакторах, наверное, нужно делать что-то другое.

 
Renat Fatkhullin #:

Для класса обертки над системными функциями, когда метод класса прямо похож на системную функцию - это разумно (обертка должна как можно ближе быть к сути) и осознанно.

Внутри функци область видимости правильно указана:

я как раз об этом и говорю, что в рамках класса можно делать и разумно делать всё что угодно и удобно, но переназначать системные функции глобально (как это делает fxsaber) - это даже не выстрел в ногу, а в голову - пользователь кода обязательно когда ни будь получит результат не тот, который ожидал.

а в приведённом примере из СБ как раз всё хорошо.

Причина обращения: