Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2012 02 26 Основы программирования в Delphi.docx
Скачиваний:
4
Добавлен:
16.08.2019
Размер:
204.56 Кб
Скачать
  1. Подпрограммы

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

Новый термин. Подпрограмма – это блок кода с именем, состоящий из заголовка, объявлений и набора исполняемых операторов. Object Pascal представляет два существенно различных вида подпрограмм –процедуры и функции.

Процедуры и функции

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

Функции и процедуры называют подпрограммами. Простейшие подпрограммы не имеют параметров (исходных данных) и не возвращают результат. Другие подпрограммы могут иметь несколько параметров и возвращают результат.

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

Новый термин. Функция – это секция автономного по отношению к главной программе кода, которая выполняет некоторые действия и возвращает результат.

Новый термин. Параметр – это значение, которое передается в функцию или в процедуру и является ее аргументом.

Структура объявления функции имеет следующий вид:

// Заголовок функции

function SomeFunction(parameter_list):Type_of_result;

{ Объявления типов данных,констант,переменных}

{ Определения функций и процедур}

begin

{ Код, реализующий алгоритм вычисления результата}

Result := <значение типа Type_of_result>;

end;

Нетрудно видеть, что функция в чем–то сходна с модулем. Так, она может содержать объявления типов, констант, переменных, процедур и функций. Однако, эти объявления имеют локальный характер. Их область действия – блок кода, ограниченный ключевыми словами begin – end.

Список параметров (parameter_list) в заголовке функции перечисляет ее аргументы, но он не обязателен: функция может и не иметь параметров.

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

Result := <значение типа Type_of_result>;

Новый термин. Процедура – это секция автономого по отношению к главной программе кода, которая выполняет некоторое действие, но не возвращает результат.

Структура объявления процедуры имеет следующий вид:

// Заголовок процедуры

procedure SomeProcedure(parameter_list);

{ Объявления типов данных,констант,переменных}

{ Определения функций и процедур}

begin

{ Код, реализующий алгоритм вычислений}

end;

Упражнение. Рассмотрим пример определения функции. Начните новый проект и выполните следующие действия:

1. Поместите на форму кнопку и надпись.

2. Дважды щелкните на кнопке формы чтобы создать обработчик события OnClick.

3. Поместите курсор редактора кода перед обработчиком события и напечатайте следующий текст:

function Multiply(Num1, Num2 : Integer) : Integer;

begin

Result := Num1 * Num2;

end;

4. Придайте обработчику события OnClick следующий вид:

procedure TForm1.Button1Click(Sender: TObject);

var

X : Integer;

begin

X := Multiply(10, 20);

Label1.Caption := IntToStr(X);

end;

Запустите программу и нажмите кнопку. Надпись отобразит число 200.

Эта программа работает так. В ответ на нажатие кнопки вызывается подпрограмма – обработчик события Button1Click. Обработчик события вызывает функцию Multiply и передает ей два параметра – числа 10 и 20. Результат вычислений запоминается в переменной Х и отображается в надписи.

ПРИМЕЧАНИЕ. Этот пример иллюстрирует применение автономной функции в программе Delphi. Обычно такого рода функции включают в состав класса главной формы приложения. Об этом будет сказано ниже.

Возникает вопрос, а каким же образом результат перемножения двух чисел из функции передается в программу? Обратимся к тексту функции Multiply:

function Multiply(Num1, Num2 : Integer) : Integer;

begin

Result := Num1 * Num2;

end;

Любая функция в Object Pascal имет локальную переменную Result. Эта переменная неявно объявлена компилятором и используется для записи результата, возвращаемого функцией. Таким образом, чтобы вернуть результат, его значение надо присвоить локальной переменной функции Result. Чтобы получить результат функции в программе, надо просто использовать имя этой функции в составе выражения допустимого вида.

К функции Multiply можно обращаться по-разному. Так, ее фактическими аргументами могут быть переменные, константы или выражения:

X := Multiply(2,5); {аргументы – константы }

Y := Multiply(A,B); {аргументы - переменные }

{ аргумент – квадрат переменной, а сама функция есть аргумент другой функции :}

Label1.Caption := IntToStr(Multiply(X, Sqr(Y));

Язык Object Pascal разрешает игнорировать результат функции. Так, абсолютно корректен следующий оператор:

Multiply(X,Y); { результат игнорируется }

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

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