Программирование в функциональном стиле в 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
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
2
3
4
Все переменные стали не нужны и нет утечек памяти.