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

 
cameofx:

В объяснении irusoh1 не хватает того, что переменная должна быть массивом (массивами) [...].

irusoh1 прав: переменная не обязательно должна быть массивом. Например:

int start()
{
   int returnvalue1, returnvalue2;
   returnvalue1 = Example(returnvalue2);
   MessageBox("Example 1: " + returnvalue1 + "\r\nExample 2: " + returnvalue2);
}

int Example(int & referenceparameter)
{
   referenceparameter = 2;
   return (1);
}
 
inkexit:

Мне нужно вернуть 2 результата из одной функции.

Если два (или более) результата должны быть присвоены переменным, просто объявите их глобальными и присвойте им значения в функции.
 
engcomp:
Если два (или более) результата должны быть присвоены переменным, просто объявите их глобальными и присвойте им значения в функции.
Хорошей практикой программирования считается минимизация количества глобальных переменных. Лучше передавать некоторые переменные по ссылке (если нужно вернуть более одной переменной), чем объявлять их в глобальной области видимости.
 
gordon:
Хорошей практикой программирования считается минимизация количества глобальных переменных. Лучше передавать некоторые переменные по ссылке (если нужно вернуть более одной переменной), чем объявлять их в глобальной области видимости.
Спасибо, Гордон, я этого не знал.
 
jjc:

irusoh1 прав: переменная не обязательно должна быть массивом. Например:

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

Использование переданного параметра в качестве ссылки функции на переменные имеет только практическую возможность модифицировать X количество переменных, плюс одну переменную с возвратом.

В то время как использование его для массива позволяет модифицировать X количество массивов в скобках, умноженное на Y размеров каждого массива.

 

Массивы всегда передаются по ссылке. Проблема с массивами MQL в том, что их нельзя изменить внутри функции (например, изменить размер), только их члены.

Это не имеет смысла и ограничивает возможности работы с массивами.

Может быть, это было исправлено в MQL5?

 
irusoh1:

[...] Проблема с массивами MQL в том, что их нельзя изменить внутри функции (например, изменить размер), только их члены.

Вы можете изменить размер массива, переданного по ссылке в функцию, внутри функции... Что вы имеете в виду?
 
[...] Проблема с массивами MQL в том, что их нельзя изменить внутри функции (например, изменить размер) only their members can.

@ irusoh1 : Вы имеете ввиду сделать параметры функции динамическими? Я тоже не понимаю.

@ Gordon : Знаете, почему говорят "параметры передаются по значению. Массивы могут быть переданы только по ссылке". Я знаю, как это будет выглядеть в коде, но я не понимаю смысла. Например, есть ли в других языках случаи, когда это не так? То есть, массивы передаются по значению или что-то в этом роде. Я не знаю, что будет противоположным этому правилу,

 

cameofx:

@ Gordon : Знаете ли вы, почему они говорят 'параметры передаются по значению. Массивы могут быть переданы только по ссылке". Я знаю, как это будет выглядеть в коде, но я не понимаю причины. Например, есть ли в других языках случаи, когда это не так? То есть, массивы передаются по значению или что-то в этом роде. Я не знаю, что будет противоположным этому правилу,

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

Привет всем

Gordon сказал: Считается хорошей практикой программирования минимизировать количество глобальных переменных. Лучше передавать некоторые переменные по ссылке (если нужно вернуть более одной переменной), чем объявлять их в глобальной области видимости.

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

спасибо

Филипп

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