« Предыдущий пост | На главную страницу | Следующий пост »

Параметры функций

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

Формальные параметры функций

Как я уже говорил в выпуске "Создание собственных функций" функцию можно описать следующим образом:

   тип    имя ( формальные параметры )
{
действия
}

Формальные параметры функции - это значения, которые передаются в функцию. Они указываются через через запятую в круглых скобках после имени функции. Для каждого параметра указывается тип (любой из стандартных: массивы, int, bool, datetime, double, color, string).

В функцию не может быть передано более 64 параметров.

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

В описании функции параметрам можно присваивать значения по умолчанию. При этом следует иметь в виду, что все параметры, следующие за первым параметром со значением по умолчанию, должны также иметь значения по умолчанию:

   int GetSomethingUseful ( int a, int b = 0, bool f = true, double r = 5.9)
{
...
}

В этом случае все или часть параметро по умолчанию можно упускать при вызове функции, а вместо них автоматически будут подставлены значения по умолчанию:

  • Вызов GetSomethingUseful(3, 5, false) будет эквивалентен вызову GetSomethingUseful(3, 5, false, 5.9).
  • Вызов GetSomethingUseful(3, 5) будет эквивалентен вызову GetSomethingUseful(3, 5, true, 5.9).
  • Вызов GetSomethingUseful(3) будет эквивалентен вызову GetSomethingUseful(3, 0, true, 5.9).

При этом следует помнить, что если мы пропускаем какой-то параметр, имеющий значение по умолчанию, то и все последующие параметры также должны не указываться.

Если мы импортируем функцию из другого модуля, то такие параметры таких функций не могут иметь значения по умолчанию.

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

  void  MyFirstFunction ()
{
int a = 10;
MySecondFunction ( a );
}

void MySecondFunction ( int b )
{
b = b + 1;
Print ( b );
}

В этом примере мы вызываем MySecondFunction, передавая в качестве параметра значение переменной "a" (в нашем случае - 10). Таким образом, при вызове MySecondFunction переменной "b" - формальному параметры функции - будет присвоено значение 10, которое будет следующей строчкой увеличено на единицу и выведено в лог. Однако при этом значение переменной a в MyFirstFunction не изменится и останется равным 10.

Существует и другой способ передачи параметров в функцию - по ссылке (используя после описания типа знак амперсенда - &). Рассмотрим новый пример:

  void  MyFirstFunction ()
{
int a = 10;
MySecondFunction ( a );
}

void MySecondFunction ( int& b )
{
b = b + 1;
Print ( b );
}

В этом примере мы вызываем MySecondFunction, передавая в качестве параметра ссылка на переменную "a". Таким образом, в функции MySecondFunction всегда, когда будет идти обращение к переменной b, реально будет идти обращение к переменной a. Т.е. следующей строчкой значение переменной "a" будет увеличено на единицу и выведено в лог. После завершения функции MySecondFunction переменная "а" будет равна 11.

В качестве параметров по ссылке можно передавать как переменные стандартных типов (но только в пределах одного модуля), так и массивы (как в пределах одного модуля, так и в другие модули).

Мы изучили константы и переменные. Однако для того, чтобы что-то сделать с данными или совершить операции по торговому счету, требуется нечто большее - нужно отдать команду. В языке программирования такие команды называются операторами. В следующем выпуске я расскажу о составном операторе.



Все статьи по теме "Пишем советников для MetaTrader 4".

« Предыдущий пост | На главную страницу | Следующий пост »

Комментарии по теме "Параметры функций"

Здравствуйте Андрей.
Поскольку Ваши статьи рассчитаны не только на программистов,я осмелюсь задать вопрос. "...Т.е следующей строчкой значение переменной "а" будет увеличено на единицу и выведено в лог." Что есть лог?
С уважением Сергей.

Здравствуйте Андрей.
Поскольку Ваши статьи рассчитаны не только на программистов,я осмелюсь задать вопрос. "...Т.е следующей строчкой значение переменной "а" будет увеличено на единицу и выведено в лог." Что есть лог?
С уважением Сергей.

Разместите свой комментарий по теме "Параметры функций"

Подписаться на мою рассылку



Размещение статьи "Параметры функций" на Вашем сайте

Размещение статьи "Параметры функций" на Вашем сайте возможно при условии выполнениия следующих условий:

  • Запрещается изменение оригинального текста без согласия автора - Андрея Ведихина.
  • Должен быть указан первоисточник. В случае публикации в интернете Вы должны разместить следующий код гиперссылки без изменений:
  • Запрещается коммерческое использование материалов, взятых с блога "Интернет-трейдинг на форекс / forex". Доступ к ним должен быть свободным, без взимания какой-либо платы, без обязательной регистрации и/или заполнения опросного листа (анкеты) и т.д.

В случае выполнения данных условий не требуется согласия автора блога "Интернет-трейдинг на форекс / forex" на размещение статьи "Параметры функций" на Вашем сайте.

Журнал FOREX MAGAZINE:



Архив номеров FOREX MAGAZINE
Котировки Forex:

Счетчики:

Авторские права © 2005-2006 Андрей Ведихин

Условия использования материалов блога "Интернет-трейдинг на форекс / forex"

Контакты с автором:


Движок сайта:
Movable Type 3.31