Разное
Облака / Clouds
The bast cloud service
Get 20 GB free!!!
Support WebDav.
Show more >>
time-tested cloud storage
Support WebDav.
Последние книги
Самое популярное
Все бесплатно
Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.
Навигация
Вопросы
Как получить размер текстового файла, не открывая его
Категория: Текст и строки
Категория: Текст и строки
Как показать balloon tooltips в программе
Категория: Приложение
Категория: Приложение
Быстрое копирование файлов
Категория: Файловая система
Категория: Файловая система
Как в Memo прокрутить текст
Категория: Компоненты
Категория: Компоненты
Числовой формат ячейки в Excel
Категория: Базы данных
Категория: Базы данных
Шифрование текста по паролю
Категория: Текст и строки
Категория: Текст и строки
Получить типы полей таблицы
Категория: Базы данных
Категория: Базы данных
Получить изображение формы в виде Bitmap и поместить его в буфер обмена
Категория: Компоненты
Категория: Компоненты
Округление в большую сторону
Категория: Математика
Категория: Математика
Добавить данные в EXE файл и получить их
Категория: Файловая система
Категория: Файловая система
Delphi - Справочник: Function
Function
|
1 Function Name : Return type; {Directives;} 2 Function Name(Parameters) : Return type; {Directives;} 3 type Name = Function{(Parameters)} : Return type {of object}; |
Ключевое слово (Unit System)
|
Определяет подпрограмму, которая возвращает значение
|
Описание:
|
Ключевое слово Function определяет подпрограмму, которая возвращает значение. Версия 1 Определяет функцию, которая просто возвращает определенный тип данных. Из функции может быть возвращено только одно значение. Версия 2 Определяет функцию, которой передаётся один или более параметров, и возвращает определённный тип данных. Из функции может быть возвращено только одно значение. Возвращаяемое значение передаётся, псевдо переменной Result. Delphi создает эту переменную для вас когда функция начинается, в соответствии с возвращаемым типом данных. (В старом коде Паскаля, нужно было присваивать это значение переменной с таким же именем как и функция). Когда функция определена в классе, её обычно называют Метод. Когда используется директива Overload, одно и то же название функции может использоваться для более чем одна функция. Другие основные директивы по порядку даются здесь: Reintroduce : Переопределяет функцию Overload : Позволяет иметь одинаковые имена 2-м и более функциям Virtual : Может быть переопределен в дочернем классе Override : Переопределяет родительский метод класса Abstract : Вызывает для осуществления дочерний клаcс Версия 3 Определяет функцию как тип данных. Это позволяет функции быть переданным как параметр, и использоваться как переменная. Определение типов определяет только конфигурацию функции - а не название. Переменная такого типа может быть назначена названию любой функции с той конфигурацией. Если назначено, то имя переменной может быть обработано, как будто это было имя функции. См. код примера. Далее, опция Of Object все еще позволяет вам обращаться к объектному методу. Обращение к переменной такого типа ведёт себя, как будто вы вызвали объектный метод непосредственно. См. второй пример. |
Пример кода: Простой пример
|
//********** Пример кода : Простой пример // Полный код Модуля. // ----------------------------------------------------------- // Вы должны поместить этот код в модуль с именем Unit1 и с формой // названную Form1, которая имеет событие OnCreate названное FormCreate. unit Unit1; interface uses // Модуль System не нуждается в объявлении Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} // Include form definitions Function GetSum(a, b : Integer) : Integer; begin // Сложение двух чисел, и возврат этого значения Result := a + b; end; // Подпрограмма On Create главной формы - наша основная программа procedure TForm1.FormCreate(Sender: TObject); var total : Integer; begin // Показ суммы нескольких пар чисел total := GetSum(1,2); ShowMessageFmt('%d + %d = %d',[1,2,total]); total := GetSum(62,444); ShowMessageFmt('%d + %d = %d',[62,444,total]); end; end. //********* Пример кода : Иллюстрация function и function type // Полный код Модуля.. // ----------------------------------------------------------- // Вы должны поместить этот код в модуль с именем Unit1 и с формой // названную Form1, которая имеет событие OnCreate названное FormCreate. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type // Сам класс формы TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} // В строке функций Function MaxValue(a, b : Integer) : Integer; begin // Возвращение наибольшего из 2-х чисел if a > b then Result := a else Result := b; end; Function MinValue(a, b : Integer) : Integer; begin // Возвращение наименьшего из 2-х чисел if a then Result := a else Result := b; end; // Основная линия кода procedure TForm1.FormCreate(Sender: TObject); type TNumberFunc = Function(a, b : Integer) : Integer; var numberFunc : TNumberFunc; a, b, c : Integer; begin // Использование функции MaxValue непосредственно a := 3; b := 6; c := MaxValue(a, b); ShowMessage('Прямой запрос к MaxValue :'); ShowMessageFmt('Max из %d и %d - %d',[a,b,c]); // Теперь вызываем её косвенно numberFunc := MaxValue; c := numberFunc(a, b); ShowMessage('Косвенный запрос к MaxValue :'); ShowMessageFmt('Max из %d и %d - %d',[a,b,c]); // И вызываем её снова для функции MinValue numberFunc := MinValue; c := numberFunc(a, b); ShowMessage('Косвенный запрос к MinValue :'); ShowMessageFmt('Min из %d и %d - %d',[a,b,c]); end; end. //********* Пример кода : Использование типа функции класса // Полный код Модуля. // ----------------------------------------------------------- // Вы должны поместить этот код в модуль с именем Unit1 и с формой // названную Form1, которая имеет событие OnCreate названное FormCreate. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type // Обявление простого класса TSimple = class private name : string; public function GetName : string; constructor Create(name : string); end; // Сам класс формы TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} // Создание простого объекта constructor TSimple.Create(name: string); begin // Сохранение переданной строки self.name := name; end; // Возвращение простого имени function TSimple.GetName: string; begin Result := name; end; // Основная линия кода procedure TForm1.FormCreate(Sender: TObject); type TNameFunc = Function : string of object; var simple : TSimple; nameFunc : TNameFunc; begin // Создание простого объекта simple := TSimple.Create('Brian'); // Показываем имя объекта ShowMessage('Имя обращённое непосредственно= '+simple.GetName); // Теперь обращаемся к этому методу косвенно nameFunc := simple.GetName; // Показываем имя объекта ShowMessage('Имя обращённое косвенно= '+nameFunc); end; end.
Результат:
|
Имя обращённое непосредственно = Brian Имя обращённое косвенно = Brian |