Меню сайта |
|
|
|
Статистика |
|
Онлайн всего: 1 Гостей: 1 Пользователей: 0 |
|
Форма входа |
|
|
|
|
Урок 7 - Функции
Добро пожаловать в мир функций языка MQL4.
Работа с функциями в любом языке состоит из двух этапов:
- изучение функций, что, порой, очень скучное занятие
- использование функций, что всегда является спасательной шлюпкой.
Итак, начнём седьмой урок.
В чём смысл функций ?
Функция очень похожа на мясорубку - вы кладёте в неё мясо, лук, специи и получаете фарш.
Мясо, лук и специи называются параметрами функции (входными параметрами функции), фарш - возвращаемое значение. А механизм мясорубки - тело функции.
Есть только одно различие между функциями и Вашей мясорубкой: некоторые функции возвращают НИЧЕГО (в MQL4 ничего называется словом void).
Пример:
Код:
double // тип фарша - возвращаемое значение my_func (double a, double b, double c) // название функции и список параметров (мясо, лук и специи)
{
return (a*b + c); // фарш на выход - функция возвращает некоторое значение
}
Как Вы видите выше, функция начинается с типа возвращаемого значения "double", за ним следует имя функции, после которого идут круглые скобки.
Внутрь скобок Вы кладёте мясо, лук и специи, точнее параметры функции.
В данном случае - три параметра: double a, double b, double c.
Затем идёт тело функции, которое заключено в фигурные скобки.
В данном примере, тело функции выполнит операцию (a*b + c).
Ключевое слово return ответственно за возвращение итого результата.
Ключевое слово return
Оператор return (); завершает работу функции (как break; завершает работу цикла), и передаёт контоль в точку вызова функции (об этом скоро).
Оператор return (); может содержать выражение в своих скобках, как в
нашем примере. Это означает, что надо завершить работу функции и вернуть
результат вычисление этого выражения.
Или оператор return (); может не содержать выражения в своих скобках. Тогда его единственная задача - завершить работу функции.
Внимание: не все функции используют оператор return (); Особенно, если возвращаемого значения нет, как в следующем примере:
Код:
void // void означает, что фарша не будет – возвращаемое значение my_func (string s) // function name and parameters list (meat & spices)
{
Print(s);
}
Эта функция не вернёт никакого значения, но она напечатает параметр s, который Вы ей предоставите. Чтобы показать, что функция ничего не возвращает, используется "void" в качестве её возвращаемого значения.
В некоторых языках программирования такие функции называются "методам", но в MQL4 они всё равно функции.
Вызов функции
Теперь, я надеюсь, мы понимаем, что такое функция. Как же использовать функции в Вашей программе?
Есть ещё один шаг, который нужно для этого сделать.
Этот шаг называется вызовом функции (её использованием).
Допустим, у Вас есть функция, котороая возвращает сумму двух integer.
Вот она:
Код:
int collect (int first_number, int second_number)
{
return(first_number+ second_number);
}
Вы хотите ей воспользоваться в своей программе.
Делается это так:
Код:
int a = 10;
int b = 15;
int sum = collect(a,b);
Print (sum);
В этом примере на экран распечатается 25. Магия! Но как компьютер узнал, что печатать?
Магической является строчка int sum = collect(a,B); Здесь Вы объявили переменную sum, чтобы в неё положить возвращаемое значение, а затем дали функции на вход два параметра (a,b).
Вы просто-напросто вызвали функцию.
Когда MQL4 видит имя функции в Вашей программе, он берёт Ваши
параметры и идёт к функции, после чего он возвращается с результатом и
кладёт его на то же место.
На самом деле, происходит следующее: в процессе компиляции MQL4 заменяет
строчку с вызовом функции в вашей программе целиком телом самой функции
(с учётом Ваших параметров). Причём вместо оператора return(); MQL4
производит присваивание возвращаемого им значения в родготовленную Вами
переменную.
Вложение функций друг в друга
В тело одной функции можно вкладывать другие функции. Это потому что
строчка вызова обрабатывается, как оператор (это и есть оператор).
Пример:
Код:
void print_collection (int first_number, int second_number)
{
int sum = collect(first_number, second_number);
Print(sum);
}
В этом примере мы вызвали функцию collect внутри функции print_collection и распечатали результат. void означает, что возвращаемого значения нет (ещё помните?).
Спец. функции MQL4: init(), deinit(), start().
В MQL4 любая программа начинает своё выполнение с функции "init()"
(initialize) и она срабатывает, когда Вы перетаскиваете программу
(советника или индикатор) на график MetaTrader или если Вы поменяете
валюту или период графика. Задача этой функции заключается в
инициализации основных переменных, необходимых для работы Вашей
программы. (Больще об инициализации переменных Вы узнаете в следующем
уроке).
Когда Ваша программа заканчивает свою работу, или Вы закрываете окно
графика, или меняете валюту или период графика, или закрываете терминал,
срабатывает функция "deinit()" (de-initialize).
Третья функция (самая важная) "start()" срабатывает каждый раз, когда
приходят новые котировки. 90% своей программистской жизни Вы проводите
внутри этой функции.
Мы больше узнаем об этих функциях, когда будем писать своего советника и свой индикатор
|
|
Поиск |
|
|
|
Форекс портал
|