Описание функции и оператор return
По необходимости указания в программе можно выделить 2 группы функций: функции,
описания которых в программе не указываются, и функции, описания которых должны
быть указаны в программе. Описания стандартных функций в программе не указываются.
Описания пользовательских функций должны присутствовать в программе обязательно.
Описания специальных функций, если они используются, также указываются в программе.
Формат описания функции
Описание функции состоит из двух основных частей - заголовка функции и тела функции.
Заголовок функции содержит указание типа возвращаемого значения, название функции
и список формальных параметров, обрамлённый круглыми скобками. Если функция не
должна возвращать никакого значения, то её тип обозначают void.
Тело функции может состоять из простых и/или составных операторов, обращений к другим
функциям и заключается в фигурные скобки.
Тип_возвращаемого_значения Название_функции (Список формальных параметров)//Заголовок
{ // Открывающая фигурная скобка
Программный код, // Тело функции может состоять ..
составляющий тело //.. из операторов и ..
функции //.. обращений к другим функциям
} // Закрывающая фигурная скобка
Список параметров указывается через запятую. Количество параметров,
передаваемых в функцию, ограничено и не может превышать 64. В качестве формальных
параметров в заголовке функции могут быть указаны только переменные (но не константы,
вызовы других функций или выражения). Количество, тип и порядок упоминания передаваемых
параметров в вызове функции должны совпадать с количеством, типом и порядком упоминания
формальных параметров, указанных в описании функции (исключение составляет вызов
функции, имеющей параметры со значением по умолчанию):
int My_function (int a, double b)
{
int c = a * b + 3;
return (c);
}
int
My_function
int a
double b
Параметры, передаваемые в функцию, могут иметь значения по умолчанию, которые задаются
константами соответствующего типа:
int My_function (int a, bool b=true, int c=1, double d=0.5)
{
a = a + b*c + d2;
int k = a * 3;
return (k);
}
int
My_function
int a
bool b
true
int c
1
double d
0.5
a,b,c,d,k
Если в вызове функции, имеющей умолчательные значения, указаны фактические параметры,
то к расчёту в функции будут приняты значения фактических параметров. Если в вызове
функции, имеющей умолчательные значения, не указаны какие-то фактические параметры,
то к расчёту в функции принимаются соответствующие значения по умолчанию.
Специальные функции также могут иметь параметры. Однако при вызове этих функций
клиентским терминалом никакие параметры извне переданы не будут, а будут использованы
умолчательные значения. Специальные функции могут быть вызваны из любого места
модуля по общим правилам, наравне с другими функциями.
Правила исполнения функции
Место в программе для описания функции:
|
Описание функции должно находиться в программе обособленно, за пределами любых других
функций (т.е. не внутри какой-либо другой функции, а снаружи). |
Исполнение функции:
|
Вызванная для исполнения функция исполняется в соответствии с кодом, составляющим
тело функции. |
Формат оператора return
Возвращаемое функцией значение - это значение параметра, указанного в скобках оператора
return. Оператор return состоит из ключевого слова return, Выражения, обрамлённого
круглыми скобками, и заканчивается знаком ; (точка с запятой). Полноформатный оператор
return:
return (Выражение ); // Оператор return
В качестве выражения в круглых скобках может быть указана константа, переменная или
вызов функции. Тип значения, возвращаемого с помощью оператора return,
должен совпадать с типом возвращаемого значения функции, указанным в заголовке.
В случае если этого совпадения нет, значение выражения, указанного в операторе
return, приводится к типу возвращаемого значения, указанному в заголовке описания
функции. В случае если такое преобразование невозможно, на этапе компиляции программы
редактор MetaEditor выдаст сообщение об ошибке.
Правило исполнения оператора return
|
Оператор return прекращает исполнение ближайшей внешней функции и передаёт управление
в вызывающую программу в соответствии с правилами, определёнными для вызова функции.
Значением, возвращаемым функцией, является значение выражения, указанного в операторе
return. Если тип значения параметра, указанного в операторе return, не совпадает
с типом возвращаемого значения, указанным в заголовке функции, то значение приводится
к типу возвращаемого значения, указанному в заголовке. |
Пример использования оператора return, возвращающего значение:
bool My_function (int Alpha)
{
if(Alpha>0)
{
Alert("Значение положительно");
return (true);
}
return (false);
}
В функциях с типом возвращаемого значения void необходимо использовать оператор return без выражения:
return; // Оператор return без выражения в круглых скобках
Пример использования оператора return без возврата значения:
void My_function (double Price_Sell)
{
if(Price_Sell-Ask >100 * Point)
Alert("Прибыль по ордеру более 100 п");
return;
}
В описании функции допускается отсутствие оператора return. В этом случае функция
автоматически завершает работу, если (в соответствии с исполняемым алгоритмом)
в теле функции исполнился последний оператор. Пример описания функции, в которой
не указан оператор return:
void My_function (int Alpha)
{
for (int i=1; i<=Alpha; i++)
{
int a = 2*i + 3;
Alert ("a=", a);
}
}
В данном случае функция завершит работу в момент
окончания исполнения оператора цикла for. Последним движением при исполнении функции
будет проверка условия в операторе цикла. Как только Условие в заголовке оператора
цикла for станет ложным, управление будет передано за пределы оператора цикла.
Но в связи с тем, что оператор цикла является последним исполняемым оператором
в теле функции My_function (), пользовательская функция завершит работу, а управление
будет передано за пределы функции, именно в то место, откуда функция была
вызвана на исполнение.