- •Модуль и его структура
- •Структура модуля
- •Список uses
- •Интерфейс
- •Реализациия
- •Инициализация и завершение
- •Ключевые слова
- •Слово const
- •Слово type
- •Слово var
- •Комментарии
- •Переменные
- •Типы данных и переменные
- •Преобразование типов
- •Знаки операций
- •Массивы
- •Одномерные массивы
- •Многомерные массивы
- •Функции Low и High
- •Динамические массивы
- •Короткая строка
- •Длинная строка
- •Расширенная строка
- •Строка с терминальным нулем
- •Операции со строками Слияние
- •Извлечение символа
- •Управляющие символы в строках
- •Разбиение литерала по строкам программы
- •Сравнение строк
- •Строковые функции
- •Форматирование строк
- •Множества
- •Объявление записи
- •Оператор with
- •Массивы записей
- •Совместимость типов данных
- •Указатели
- •Статические и динамические переменные
- •Размещение динамических переменных
- •Разыменование указателя
- •Управление вычислениями Операторы if, then, else
- •Выполнение нескольких инструкций.
- •Вложенные условия.
- •Циклы Элементы структуры цикла
- •Цикл for…
- •Функции Pred и Succ
- •Цикл while
- •Цикл repeat
- •Управление циклами
- •Оператор goto
- •Оператор case
- •Область видимости идентификаторов
- •Подпрограммы
- •Процедуры и функции
- •Объявление и определение подпрограммы
- •Параметры подпрограмм
- •Локальные процедуры и функции
- •Перегрузка подпрограмм
- •Параметры по умолчанию
- •Включение внешнего файла в модуль
Подпрограммы
Подпрограммы в 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 есть много функций, которые возвращают сведения об условиях, при которых та или иная функция выполнила свою работу. Результат обращения к такой функции можно и не использовать если это не противоречит логике программы.