Облака / 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

  << Вернуться