Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Podprogrammy.doc
Скачиваний:
37
Добавлен:
23.08.2019
Размер:
1.92 Mб
Скачать

Функции

Описание функции состоит из заголовка и блока. Заголовок включает ключевое слово Function, имя функции, необязательный список формальных параметров, заключенный в круглые скобки, и тип возвращаемого функцией значения. Заголовок имеет формат:

Function <Имя> [ (Формальные параметр) ] : <Тип результата>

Возвращаемое значение может иметь любой тип, кроме файлового.

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

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

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

Пример. Рассмотрим процедуру обработки события нажатия кнопки Buttoni, в которой вызываются две функции Length и ChangeStr2.

procedure TForm1.Button1Click(Sender: TObject);

function ChangeStr2(Source: string; const charl, char2: char): string;

label 10;

var n: integer;

begin

Result := Source;

10: n := pos(charl, Result);

if n > 0 then begin Result[n] := char2; goto 10; end;

end;

var strl: string; n: integer;

begin

strl := Editl.Text;

strl := ChangeStr2(strl, Ч 1 , ' * ' ) ;

Editl.Text := strl;

n := Length(strl);

end;

Функция Length возвращает длину строки и может быть использована без предварительного описания, поскольку оно содержится в модуле system.

Функция Changestr2 выполняет те же действия, что и процедура changestr из предыдущего примера.

Вызов функции используется в выражении оператора присваивания.

Параметры и аргументы

Параметры являются элементами подпрограммы и используются при описании ее алгоритма. Аргументы указываются при вызове подпрограммы и замещают параметры при выполнении подпрограммы. Параметры могут иметь любой тип, включая структурированный. Существует несколько видов параметров:

  • значение;

  • константа;

  • переменная;

  • нетипизированная константа и переменная.

Группа параметров, перед которыми в заголовке подпрограммы отсутствуют слова var или const и за которыми следует их тип, называются параметрами-значениями.

Например: procedure PI(a: real; g: integer)

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

Группа параметров, перед которыми в заголовке подпрограммы стоит слово const и за которыми следует их тип, называются параметрами-константами. Например: procedure P2(const х, у : integer). В теле подпрограммы значение параметра-константы изменить нельзя. Параметрами-константами можно оформить те параметры, изменение которых в подпрограмме нежелательно и должно быть запрещено. Кроме того, для параметров-констант строковых и структурных типов компилятор создает более эффективный код.

Группа параметров, перед которыми в заголовке подпрограммы стоит слово var и за которыми следует их тип, называются параметрами-переменными.

Например: function Fl(var d, f: real; ql7 : integer): real;

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

Для параметров-констант и параметров-переменных можно не указывать их тип, в этом случае они считаются нетипизированными. В этом случае подставляемые на их место аргументы могут быть любого типа, и программист должен самостоятельно интерпретировать типы параметров в теле подпрограммы. Примером задания нетипизированных параметров-констант и параметров-переменных является следующее описание: function F2 (var el; const t2): integer;

Отметим, что группы параметров в описании подпрограммы разделяются точкой с запятой.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]