img

Пользовательские функции

Функция - это фрагмент кода или алгоритм, который выполняет свою определенную последовательность операций. Каждая функция может включать в себя:

  • название функции
  • возвращаемое значение
  • формальные параметры
  • тело функции

Пример:

 int multiplication(int a, int b) { return a*b; } 

Название функции - "multiplication"; возвращаемое значение - int, формальные параметры "a" и "b" (оба типа int), тело функции состоит из единственного оператора - return a*b;

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

Пример:

 int Initialize() {return(0);} int Run() { int a=1; changeA(a); System.Print("a="+a); return(0); } void changeA(int a) { a=2; } int DeInitialize(){return(0);} 

Результат:

a=1

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

 int Initialize() {return(0);} int Run() { int a=1; changeA(a); System.Print("a="+a); return(0); } void changeA(int &out a) { a=2; } int DeInitialize(){return(0);} 

Рузультат:

a=2

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

Пример:

 int Initialize() {return(0);} int Run() { System.Print("sum1="+sum(2)); System.Print("sum2="+sum(10,20,30)); return(0); } int sum(int a, int b=3, int c=4) { return a+b+c; } int DeInitialize(){return(0);} 

Результат:

 sum1 = 9 sum2 = 60 

Функция может возвращать ссылку на глобальную переменную, при помощи этой ссылки возможно осуществлять запись и чтение значения глобальной переменной.

 extern int a1=0; extern int a2=0; extern int a3=0; extern int a4=0; extern int a5=0; int Initialize() {return(0);} int Run() { for(int i=0;i<5;i++) { changeGlobal(i)=7; } for(int i=0;i<5;i++) { System.Print("i="+i+" value="+changeGlobal(i)); } return(0); } int DeInitialize(){return(0);} int& changeGlobal(int i) { switch(i) { case 1: return a1; case 2: return a2; case 3: return a3; case 4: return a4; case 5: return a5; } return a5; } 

Результат:

 i=0 value=7 i=1 value=7 i=2 value=7 i=3 value=7 i=4 value=7 

Для удобства использования функций пользователя допускается их группировка и вынесение в отдельные файлы. Эти файлы, при необходимости использования, необходимо включить при помощи директивы #include "раздел\имя_файла".

Пример:
Пусть имеется скомпилированный файл io.ntl, который находится в разделе Advisors :

 void Print(array <int> a, string separator=" ") { string data=""; for(uint i=0;i<a.length();i++) { data+=a[i]; if(i<a.length()-1) data+=separator; } System.Print(data); } 

В скрипте ArrayExample.ntl используется функция Print, определенная в io.ntl:

 #include "Advisors\io.ntl" int Initialize() { return(0); } int Run() { array<int> a = {22,11,33}; Print(a); return(0); } int DeInitialize() { return(0); }