Функция, возвращающая 2 результата? - страница 3

 
gordon:
Вот упрощенное объяснение -> https://www.mql5.com/en/forum/117210. Массивы всегда передаются по ссылке в MQL4.

Да, спасибо. Но, как я уже спрашивал, подразумевает ли это, что на других языках это не так? Если бы это был единственный способ донести это, используя MQ/MT4 или другую языковую конструкцию, тогда, я полагаю, им не пришлось бы утруждать себя заявлением об этом.

Наверное, я спрашиваю о "технических деталях", как вы сказали в том сообщении. Просто из любопытства, а не по необходимости.

Что касается синтаксиса, то язык MQL5 для программирования торговых стратегий очень похож на язык программирования C++, за исключением некоторых особенностей:

  • нет адресной арифметики;
  • нет оператора goto;
  • нельзя объявить анонимное перечисление;
  • конструкторы классов и структур не могут иметь параметров;
  • нет множественного наследования.

Таким образом, я могу предположить, что на C++ все будет наоборот... В любом случае, спасибо, Гордон.

 
Matutin:

Извините, но это не "технический" ответ :) Не могли бы вы сказать, почему лучше передавать переменную по ссылке, а не глобальную переменную?

Много причин, которые я предпочитаю не повторять, вместо этого я отсылаю вас сюда -> https://en.wikipedia.org/wiki/Global_variable и сюда -> http://www.c2.com/cgi/wiki?GlobalVariablesAreBad (вы можете погуглить для большего... Это общепринятая концепция и в сети есть много информации).

 
cameofx:

[...] подразумевает ли это, что на другом языке это не так? [...]

Ничего не подразумевает, но конкретно в C и C++ массивы также передаются по ссылке (технически передается указатель на первый элемент массива, но этот указатель передается по значению).
 
gordon:

Много причин, которые я предпочитаю не повторять, вместо этого я отсылаю вас сюда -> https://en.wikipedia.org/wiki/Global_variable и сюда -> https://www.mql5.com/go?link=http://www.c2.com/cgi/wiki?GlobalVariablesAreBad (вы можете погуглить для большего...). Это общепринятая концепция, и в сети есть много информации).


Очень интересно! К сожалению, советнику нужны параметры, и иногда много, так что мы не можем избежать их и должны заботиться обо всех причинах, упомянутых в https://www.mql5.com/go?link=http://www.c2.com/cgi/wiki?GlobalVariablesAreBad.

Я использую правила именования для GlobalVariable : гораздо проще управлять и избежать некоторых ошибок.

Спасибо, Гордон.

 
Matutin:

Очень интересно! К сожалению, EA нужны параметры, и иногда много, так что мы не можем избежать их [...].

Экстерны действительно неизбежны. Хотя они глобальны по области видимости, это не то же самое, что глобальные переменные (не путать с GV); в частности - не рекомендуется изменять их значение через код, следовательно, они не должны использоваться для передачи информации между функциями (см. здесь -> https://www.mql5.com/en/forum/123535).


Я использую правила именования для GlobalVariable: гораздо проще управлять и избежать некоторых ошибок.

Это обсуждение касается переменных, определенных в глобальной области видимости (объявленных вне специальных функций start(), init(), deinit()), а не GV... Не смешивайте эти два понятия.
 

Просто любопытно: существуют ли ЛЮБЫЕ языки программирования, в которых есть функции, возвращающие несколько результатов?

 

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

что-то вроде этого

a = 10;

b = 20;

a = a*1000

c = a+b // 10020

return(c);

затем в вызывающей функции

b = c%1000 // 20

a = c-b/1000 // 10

 
SDC:

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

что-то вроде этого

[...]
Может, и нет.
 

Почему бы и нет?

 
SDC:

Почему бы и нет?

Зачем решать проблему, которой не существует? Зачем изобретать колесо? Зачем придумывать непонятный код, который будет работать только в ограниченных случаях?
Причина обращения: