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

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

Парадигма функционального программирования находит свой путь даже в 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;
1
2
3
4
5
6
7
8
9
10

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

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

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

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

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

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