Encadeamento de métodos - Method chaining

O encadeamento de métodos , também conhecido como idioma de parâmetro nomeado , é uma sintaxe comum para invocar várias chamadas de método em linguagens de programação orientadas a objetos . Cada método retorna um objeto, permitindo que as chamadas sejam encadeadas em uma única instrução sem a necessidade de variáveis ​​para armazenar os resultados intermediários.

Justificativa

As declarações de variáveis ​​locais são açúcares sintáticos .

O encadeamento de métodos elimina uma variável extra para cada etapa intermediária. O desenvolvedor é salvo do fardo cognitivo de nomear a variável e mantê-la em mente.

O encadeamento de métodos tem sido referido como a produção de um "acidente de trem" devido ao aumento no número de métodos que vêm um após o outro na mesma linha, o que ocorre à medida que mais métodos são encadeados.

Uma sintaxe semelhante é o método em cascata , em que , após a chamada do método, a expressão é avaliada como o objeto atual, não o valor de retorno do método. O cascateamento pode ser implementado usando encadeamento de método, fazendo com que o método retorne o próprio objeto atual . O cascateamento é uma técnica chave em interfaces fluentes , e como o encadeamento é amplamente implementado em linguagens orientadas a objetos, enquanto o cascateamento não é, esta forma de "cascata por encadeamento retornando isso " costuma ser chamada simplesmente de "encadeamento". Tanto o encadeamento quanto o cascateamento vêm da linguagem Smalltalk .

Embora o encadeamento seja uma sintaxe, ele tem consequências semânticas, a saber, que requer métodos para retornar um objeto e, se estiver implementando o cascateamento por meio do encadeamento, esse deve ser o objeto atual. Isso evita que o valor de retorno seja usado para alguma outra finalidade, como retornar um valor de erro .

Exemplos

Um exemplo comum é iostream em C ++ , onde por exemplo << retorna o objeto esquerdo, permitindo o encadeamento.

Comparar:

a << b << c;

equivalente a:

a << b;
a << c;

Outro exemplo em JavaScript usa os métodos integrados de Array:

somethings
  .filter(x => x.count > 10)
  .sort((a, b) => a.count - b.count)
  .map(x => x.name)

Veja também

Referências

links externos