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”;