Composition

[ composição ]

O que é?

É basicamente uma técnica para definir a relação de um objeto que conta com outros para formar algo mais complexo. Ou seja, combina duas ou mais funções em uma nova função.

Por exemplo: um objeto do tipo Carro teria em sua estrutura objetos do tipo Roda, Volante, Porta.

Porém, a composição em JavaScript é mais voltada para as capacidades dos objetos, e não nas características.

Por que foi criada?

Sabemos que, na herança clássica, temos o famoso problema da banana -> gorila -> selva. Ou seja, o objeto final herda todos os seus ‘ansestrais’. Dessa forma, a composição entra em cena para resolver esse efeito colateral.

Por que usar?

Para construir funções puras e pequenas, compô-las e criar outras maiores e mais complexas. Ou seja, um dos princípios da programação funcional.

Nesse artigo, irei exemplificar essa técnica de 3 maneiras.

1) Object.create()

O método Object.create() cria um novo objeto com o protótipo de objeto e propriedades especificadas.

Vale salientar que, propriedades são abertas -publicas. E no exemplo acima, conseguimos criar propriedades protegidas -privadas. O nome -linha 8- só é manipulável se eu configurá-lo. Ou seja, agora temos total controle e poder sobre as propriedades, e isso é fantástico!

2) Object.assign()

O método Object.assign() é usado para copiar os valores de todas as propriedades próprias enumeráveis de um ou mais objetos de origem para um objeto destino. Este método irá retornar o objeto destino.

Desta forma, as funções não tem dependências diretas com as outras. Ou seja, as funções rápido e econômico não tem relação.

E é claro que, com o passar do tempo, o projeto aumenta e as propriedades e métodos também. Pode ficar difícil de entender e manipular. Mas calma, você pode adaptar os códigos acima com uma função fábrica.

3) Com Programação Funcional

A função composition:

  1. recebe uma string como parâmetro.
  2. aplica a função toLowerCase no parâmetro passado -transforma tudo em letras minúsculas.
  3. retorna o valor da função para replaceSpaces -retira os espaços em branco da string.
  4. retorna a nova string transformada.

Conclusão

O caminho mais curto para a composição é ter funções modularizadas. Uma função modularizada deve ter 1 argumento de entrada e saída.

Você pode transformar qualquer função em uma função modular com currying.

Para mais detalhes eu recomendo o vídeo a seguir: