Way23
Главная
По категориям
Контакты
Главная
По категориям
Контакты

Программирование в функциональном стиле в Delphi

Вольный перевод поста Functional programming style in Delphi.

Парадигма функционального программирования находит свой путь даже в Delphi — императивном языке без сборщика мусора. Рассмотрим следующий пример кода, который меняет заголовок кнопки используя расширенный RTTI (требуется версия Delphi 2010 или выше).

procedure TForm1.Button1Click(Sender: TObject);
var
  Ctx: TRttiContext;
  P: TRttiProperty;
  T: TRttiType;
begin
  T:= Ctx.GetType(TButton);
  P:= T.GetProperty('Caption');
  P.SetValue(Button1, 'RTTI');
end;

При анализе этого кода обратите внимание на следующее:

  • Тип TRttiContext - запись (record); вам не нужно создавать и уничтожать переменную с типом запись в том виде как это делается для объектов.
  • TRttiProperty и TRttiType - классы; Экземпляры этих классов создаются соответствующими методами классов TRttiType и TRttiContext, но вам не нужно уничтожать их самостоятельно — лежащая в основе них расширенная реализация RTTI заботится об этом сама.

В результате код может переписан в функциональном стиле:

procedure TForm1.Button1Click(Sender: TObject);
begin
  TRttiContext.Create.GetType(TButton).GetProperty('Caption').SetValue(Button1, 'RTTI');
end;

Все переменные стали не нужны и нет утечек памяти.

Последниее изменение: 24.08.2023, 06:42