Облака / Clouds
    Go to Copy.com
    Copy.com
    The bast cloud service
    Get 20 GB free!!!
    Support WebDav.
    Show more >>

    Go to Dropbox.com
    Dropbox.com
    time-tested cloud storage
    Support WebDav.
Все бесплатно
    Все ссылки на файлы, расположенные на страницах сайта, добавлены пользователями и доступны для бесплатного скачивания. За содержание этих файлов администрация сайта ответственности не несет.



Вопросы
  Как показать balloon tooltips в программе
   Категория: Приложение
  Быстрое копирование файлов
   Категория: Файловая система
  Как в Memo прокрутить текст
   Категория: Компоненты
  Числовой формат ячейки в Excel
   Категория: Базы данных
  Шифрование текста по паролю
   Категория: Текст и строки
  Получить типы полей таблицы
   Категория: Базы данных
  Округление в большую сторону
   Категория: Математика
  Добавить данные в EXE файл и получить их
   Категория: Файловая система

Delphi - Справочник: Function

ABCDEFGHIJKLMNOPQRSTUVWXYZ

  << Вернуться  

 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

  << Вернуться