ForEach faz uso de funções anônimas para realizar a tarefa.
base
Funções e/ou Procedures anônimas são úteis para gerar mecanismo de eventos sem necessidade de criar um evento para objeto. O uso de um evento é obrigatório a existência de uma classe para injetar o evento a ser chamado. Com anônimos é possível injetar um evento a qualquer chamada, não demandando a obrigação da criação de uma classe.
elementar meu caro
Um anônimo pode figurar como um “procedure” (sem retorno) ou uma “function” (com um valor de retorno). Usar como procedure ou função é dependente do objetivo que o CODER pretende empregar ao seu código, se deseja um valor de retorno a resposta será usar um função nas demais irá preferir usar um procedure.
prática
-
Unit: MVCBr.ApplicationController
ForEach(….): executa um loop sobre uma lista de itens enquanto existir item ou a Função Anônima retornar FALSE;
Exemplo:
[code]
function TApplicationController.FindModel(AGuid: TGuid): IModel;
var
rst: IModel;
begin
rst := nil;
ForEach(
function(ACtrl: IController): boolean
begin
result := false;
ACtrl.GetModel(AGuid, rst);
if assigned(rst) then
result := true;
end);
result := rst;
end;
[/code] -
Unit: Data.DB.Helper
ForEach em um objeto TDataset:
[code]
ForEach(function (ds:TDataset):boolean
begin
/// executa para cada item do dataset
result:= false; /// não finalizar o loop e ir para o proximo
end);
[/code]