Функция для возврата нескольких значений - страница 3

 
Denis Glaz:

Вот что бывает, когда люди не изучающие программирование в целом, начинают сразу учить MQL.

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

Обьявляем структуру. Обычное обьявление переменной, но только тип будет как ИМЯ_СТРУКТУРЫ.

Потом в обьявлении функции будет тип

ИМЯ_СТРУКТУРЫ название_функции(бла бла бла)
{
   бла бла бла;

    СТРУКТУРА.А = 10;

    CТРУКТУРА.Б = 15;

   return = СТРУКТУРА

}


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

Почему-то эта возможность реально используется чрезвычайно редко. Посмотрел описания языков C++, Pascal, VBA. Везде говорится, что тип возвращаемого функцией значения должен быть задан, и вовсе необязательно базовый. Однако ни разу не встретил пример функции, возвращающей значение небазового типа. Среди списков встроенных функций тоже вспомнить такую функцию не смог. Не встретил и в описаниях MQL4, MQL5. Да и сам ни разу не использовал.

Чем оказался неугоден такой способ передачи данных? Почему не прижился? Вероятно, здесь играет роль то, зачем вообще нужны функции, возвращающие значение. Можно ведь ограничиться и процедурами (в MQL и C это функции с типом void, в Паскале и VBA "процедуры"). Идею ответа нашел здесь http://www.askit.ru/custom/vba_office/m3/03_08_01_subroutines_basics.htm:

"В принципе, процедуры типа Sub тоже могут возвращать значения — при помощи переменных (об этом — ниже). Зачем же тогда нужны функции? Все очень просто: функцию можно вставлять практически в любое место программного кода."

А куда приходится вставлять? Ведь чаще всего в выражения, арифметические или логические. А в них чаще всего используются базовые типы. Получается, мало смысла вводить функцию, возвращающую структурное значение. Есть и другие неприятности, например, в Паскале функция не может возвращать файловую переменную. Поэтому считаю самым подходящим для использования вариант, описанный в сообщении выше:

Alexey Subbotin 2011.04.13 16:32 2011.04.13 15:32:53   EN

void Test (int &a, int &b)

с небольшим уточнением. Значение обычно удобнее все же возвращать, числовое, строковое или булевское, а через параметры получать не только базовые, но и структурные типы.

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