Neste artigo, faremos uma abordagem bem específica. Vamos abordar a programação funcional e linguagens de domínio específico, DSL. Primeiramente, vamos explicar as vantagens de se trabalhar com DSL e como ela pode ajudar o seu negócio. Em seguida, abordaremos os mesmo pontos referentes a programação funcional e finalmente explicaremos a vantagem de se trabalhar com os dois juntos. O objetivo aqui é explorar uma das várias maneiras que temos para resolver nossos problemas de arquitetura de projetos.
Embora a DSL possua uma expressividade limitada, ela é muito útil, pois é focada em um domínio específico, além de possuir um alto senso de fluência e composicionalidade. Ao utilizamos a DSL de maneira interna, temos a possibilidade de estilizar a linguagem principal, pois ela é válida dentro do código principal. Sendo assim, o código mais torna-se mais legível para não programadores.
A grande vantagem de se utilizar a DSL é melhorar a comunicação, seja entre APIs ou entre programadores e gestores. Um exemplo de comunicação em APIs são as APIs de comando de consulta, que podem podem ser fragmentadas. Um exemplo deste tipo de DSL é o SQL.
Quando falamos em comunicação entre gestores e programadores, lembro-me da palestra do Augusto Pascuti no PHP Experience 2016, quando ele falou sobre ganho de comunicação com não programadores. Fica muito claro este fator quando pensamos nas regras de negócio.
Quando um gestor consegue ler um código, mesmo sem conseguir escrever, ele consegue identificar erros, como, por exemplo, erros de validação. O gestor também consegue saber do que o código trata, discutir a instanciação das regras e saber a função daquele código. Este diálogo é de extrema importância para o bem estar da empresa e a qualidade do produto.
Falando em especificidades, podemos entrar no âmbito da programação funcional. Segundo Marcelo Santos, palestrante do PHP Experience 2016, a programação funcional define a estrutura do código. Ademais, o paradigma funcional facilita a decomposição do problema e reduz a complexidade do código.
Outra vantagem da programação funcional, talvez um dos pontos mais fortes, é que elas são recursivas por natureza, então, ela é capaz de implementar mais rapidamente o conceito. Além disso, a grande flexibilidade, a abstração, a modularização e a transparência referencial são fatores que contribuem para tornar este paradigma um forte candidato para resolução de problemas.
Agora, por que mesclar programação funcional com DSL é uma boa ideia? Bom, se você focar o seu desenvolvimento funcional em funções como each, filter, find, some, every, map e reduce, o seu código passa a ser mais conciso e expressivo, evitando o uso de for e loops e finalizando em um código bastante próximo da lógica do negócio.
Trazendo este paradigma que tende a facilitar a decomposição de problemas, e aliá-lo a DSL, que tem por finalidade deixar o código mais legível para não programadores, temos então uma arma poderosa para a resolução de problemas e, por consequência, conseguimos atingir uma melhor qualidade e menos retrabalho no produto final.