Fluent Interface no Delphi

Boa noite, pessoal!
Sejam bem-vindos à “quinta temporada” de artigos! Dessa vez não fiz a pausa, já que fiquei ausente um bom tempo há alguns meses.
Antes de retornar aos assuntos envolvendo Engenharia de Software, decidi apresentar uma série de pequenos artigos sobre Delphi. Neste primeiro artigo, o assunto é Fluent Interface!

Já ouviu falar em Fluent Interface? Trata-se de um padrão de desenvolvimento de software que permite o encadeamento de métodos para facilitar a escrita e leitura do código. Em outras palavras, é uma técnica que possibilita chamadas seriais dentro do escopo de um mesmo objeto. Um dos propósitos deste padrão é aproximar o código-fonte de uma linguagem natural, como se estivéssemos codificando uma “frase”.

Exemplo 1

Sem delongas, apresentarei um exemplo pequeno como introdução deste assunto.

Suponha que seja necessário importar alguns dados, como nomes de cidades, que estejam em um formato fora do padrão semelhante ao texto abaixo:

Durante essa importação, deseja-se aplicar três regras:

  • Remover os espaços em branco no início e no final do texto;
  • Converter as letras para maiúsculas;
  • Substituir um caracter (“+” por espaço).

Como você escreveria este código? Com Trim, UpperCase e StringReplace, certo?

Embora o código acima seja válido, há uma maneira de melhorá-lo. Nas versões mais recentes do Delphi, é possível usar Fluent Interface para “encadear” estes três métodos:

Bem melhor, não? Todo o código fica em apenas uma linha sem comprometer a leitura. Na verdade, pode-se dizer que o código tornou-se mais legível, não acham?

Exemplo 2

Dessa vez, imagine que seja preciso copiar as 10 primeiras letras de um texto e verificar se existe a palavra “INFO”. Vejam só:

Fácil, hein? 🙂

Fluent Interface na RTL

Agora que vocês já conhecem o Fluent Interface, certamente encontrará algumas aplicações na própria RTL do Delphi. A classe TStringBuilder é um exemplo clássico:

O código acima produz o seguinte resultado:

Exemplo de Fluent Interface no Delphi com TStringBuilder

Desenvolvendo classes com Fluent Interface

Ao invés de apenas consumir este recurso, também podemos criá-lo em nossas classes. Para isso, basta que as suas funções retornem o próprio objeto. Na classe de exemplo abaixo, responsável por armazenar colunas de uma instrução SQL, foi aplicado o Fluent Interface no método AddColumn:

Como a função retorna o próprio objeto (Self), podemos utilizar a classe dessa forma:

 

Espero que tirem bom proveito deste recurso, pessoal.
Grande abraço e até logo!


 

André Celestino