Buscando solução para chamadas complexas ou encadeadas onde é necessário retornar um conteúdo para o chamador de uma rotina com o resultado.

Se temos 2 ou mais chamadas encadeadas para um processo e queremos que o resultado retorne para o primeiro – temos para isto a possibilidade de propagar eventos em objetos ou passar parâmetros como um objeto no todo – creio que é mais comum entre os developers.

Penso para estes caso o uso de “anonimous” pode ser uma solução de fácil implementação não exigindo criar um estrutura complexa de eventos ou objetos cabendo perfeitamente como solução.

Uma das características de anônimos é sua passagem como parâmetro em um procedimento/função e poder esperar um retorno ou um chamada de volta, ou seja, um “callback” de retorno (é um ponteiro que passamos para a chamada e ele é chamado de volta pelo procedimento chamado – callback).

Neste caso precisamos de um procedimento que esteja esperando um tipo de paramento, no caso um “anonimous” ex:

     /// criando um procedimento que aceita um callback 
     TUmObjeto.executar( aCallBack:TProc<String> );
          begin
            // faz alguma coisa
            // chama o callback
            aCallBack( 'ok' );
          end;

na chamada do procedimento podemos então fazer:

/// chamando o procedimento e passando como parâmentro um procedimento "anonimous"
  umObjeto.executar(
     procedure (aDado:String)
        begin
           //.... faz alguma coisa
        end);

O Delphi faz diferenciação de assinaturas entre “procecures” e “functions”, onde as functions retornam algum valor enquanto as procedures não retorna nada (algo equivalente a “void” em outras linguagens);

Sim, é possível usar uma “function” como anônimo, veja:

    /// para procedure:     TProc, ou TProc<tipo>
    /// para function:       TFunc<boolean> ou  TFunc<tipo,boolean>

</tipo,boolean></boolean></tipo>

No caso de TFunc o último parâmetro é sempre o tipo a ser retornado pela “function”;