После длительного программирования на C++ понадобилось слепить программу с гуём. Выбрал в качестве языка реализации Delphi. В первый же день выяснилось, что теперь мне для комфорта не хватает чего-нибудь такого:
type TStringCallback = procedure(i: Integer; s: string; o: TObject) of object;
procedure ForEach(strings: TStrings; callback: TStringCallback); overload;
var i: Integer;
begin
for i := 0 to Pred(strings.Count) do
begin
callback(i, strings[i], strings.Objects[i]);
end;
end;
Перегрузить по мере надобности для всех типов коллекций, динамических массивов, COM’овских enumerator’ов. Кажется, называется
Internal Iterator Pattern.
Попутно замечаю, что стал ставить begin/end даже вокруг одиночных операторов и втыкать точку с запятой там, где её вообще-то не надо. Coding style, блин. Забавно.