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

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

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

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

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

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

Формальные параметры функции - это значения, которые передаются в функцию. Они указываются через через запятую в круглых скобках после имени функции. Для каждого параметра указывается тип (любой из стандартных: массивы, 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".

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

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

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

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

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

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


Рассылки Subscribe.Ru
Методы анализа рынка ФОРЕКС / FOREX. Торговые стратегии

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

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

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

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

Журнал FOREX MAGAZINE:



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

Счетчики:

Рейтинг@Mail.ru Rambler's Top100
Рассылка 'Методы анализа рынка ФОРЕКС / FOREX. Торговые стратегии'
Авторские права © 2005-2006 Андрей Ведихин

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

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


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