Разное
Облака / Clouds

The bast cloud service
Get 20 GB free!!!
Support WebDav.
Show more >>

time-tested cloud storage
Support WebDav.
Последние книги
Самое популярное
Все бесплатно
Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.
Навигация
Вопросы
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 |