Параметры-значения в Delphi XE

Категория: Учебники по Delphi » Delphi XE

Все формальные параметры, которые перечислены в заголовке подпро­граммы подобным образом

 Procedure one(a,b,c: integer); Var n: integer; Begin n:= a * b*c; End; 

называются параметрами-значениями. В данной процедуре это a,b,c. Та­кой способ передачи параметров в процедуру называется передачей по значению.

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

 

Формальные и фактические параметры в Delphi XE

Категория: Учебники по Delphi » Delphi XE

Формальные параметры записываются в заголовке подпрограммы. Они определяют количество, последовательность и тип параметров, которые передаются в подпрограмму и в ней используются. Для каждого формаль­ного параметра указывается его имя и - через двоеточие - тип. Друг от друга в списке параметры отделяются точкой с запятой. Параметры одно­го типа можно перечислять через запятую, а затем указывать их общий тип.

 

Все формальные параметры можно разделить на:

  1. параметры-значения;
  2. параметры-переменные;
 

Локальные и глобальные подпрограммы в Delphi XE

Категория: Учебники по Delphi » Delphi XE

Все переменные, константы, типы, функции и переменные, объявленные в подпрограмме, являются локальными (то есть местными). Они «видны» только в подпрограмме и доступны только в её теле. После завершения вызова подпрограммы (все операторы выполнены) они прекращают своё существование.

 

Если в подпрограмме используются глобальные идентификаторы, то тут имеется одна тонкость: если в подпрограмме объявлен точно такой же идентификатор, что и в главной программе (например, две переменные имеют одно и то же имя), то в подпрограмме будет использоваться именно локальный элемент, а глобальный подпрограмма не увидит вообще и даже знать о нём ничего не будет!

 

 

Вызов процедур и функций в Delphi

Категория: Учебники по Delphi » Delphi XE

Для вызова процедуры из основной программы или другой процедуры (функции) необходимо записать оператор, составленный из имени проце­дуры (функции) и списка фактических параметров, которые должны сов­падать по количеству и типу с формальными параметрами.

 

При вызове процедуры ей передаются указанные параметры, которые ста­новятся локальными переменными процедуры, к ним добавляются ло­кальные переменные самой процедуры, а затем выполняются операторы, записанные в теле процедуры. Как только тело процедуры выполнено, управление передаётся тому оператору программы, который следует за вызовом процедуры.

 

Например, для попискивания вредного персонажа игры мы можем в нуж­ном месте обратиться за помощью к нашей процедуре Sound(name: String); по извлечению звуков:

Sound(’pisk’);

Естественно, вместо формального параметра name, мы должны указать имя реально существующего звукового файла на диске, который и содер­жит нужное нам попискивание.

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

fact (10);

В этом случае функция вычислит факториал числа 10, но оно будет про­игнорировано программой. Обычно поступают более культурно, и работа функции не пропадает даром. Для этого возвращаемое значение присваи­вают переменной того же типа (или совместимого), что и функция:


Var n: integer;
n:= fact(10);

После вызова функции переменная nпримет значение 10! (посчитайте са­ми, сколько это будет!).

 

Вызов функции называют также обращением к функции.

 

Фактические параметры перечисляются через запятую.

 

 

Описание функции в Delphi

Категория: Учебники по Delphi » Delphi XE

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

В последних версиях Delphiвозвращать значение можно с помо­щью процедуры ехк(значение).

Для примера напишем функцию, вычисляющую факториал числа n.

 function fact(n: integer): integer; // Заголовок функции var                    
// Объявления локальных            переменных
f,i: integer; begin f:= n; for i:= n-1 downto 2 do f:= f*i; fact:=  f; //    Возвращаемое значение
//или
//result:= f; 
//или
//exit(f);
end;              //             Конец функции 

Если вы не вернули значение функции ни одним из описанных спо­собов, то её значение будет неопределённым!

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