Eu sei que isso obj.func1().func2()
é chamado de encadeamento de métodos, mas qual é o termo técnico para:
func1(func2(), func3());
Onde o retorno de uma função é usado como argumento para outro.
terminology
zhenka
fonte
fonte
obj.func1().func2() is called method chaining
- Correção: É chamado de acidente de trem.obj.func1()
sempre retorna um objeto que temfunc2()
como função membro.Respostas:
Não acho que seja composição de funções. Composição de funções significa pegar duas ou mais funções e transformá-las em uma nova função, como
f . g . h
em Haskell. Observe que nenhuma função é chamada neste momento.Pessoalmente, eu me referiria a construções como
func1(func2(), func3())
"chamadas de funções aninhadas".fonte
f(g())
se faz é chamarf()
com uma expressão para o primeiro argumento, e acontece que a chamada de função seg()
qualifica como expressão. Mas se tem que haver um nome para isso, é o mais próximo possível.Em matemática, isso se chama composição de funções . Acho que não ouvi o termo ser aplicado à programação. Isso pode ocorrer porque o uso é amplamente evitado por alguns motivos. Ele pode introduzir bugs estranhos quando as funções têm efeitos colaterais, porque os compiladores estão livres para avaliar a função3 antes da função2. É mais difícil depurar porque você não pode definir pontos de interrupção nem imprimir resultados intermediários, e a maioria das pessoas simplesmente acha mais difícil ler.
fonte
printf("%d %d\n", strlen(a), strlen(b));
vez de usar variáveis intermediárias.func1(func2(func3(x)))
. Ou tecnicamente, refere-se as funções próprias: seg(x) = f1(f2(f3(x)))
, em seguida,g
( nãog(x)
), é a composição def1
,f2
ef3
. Embora eu pudesse ver uma maneira pela qual você poderia chamar a estrutura na pergunta "composição da função", isso me parece um uso muito incomum do termo, em um sentido matemático.Como @Karl Bielefeldt aponta, é chamado de composição de funções em matemática.
Não existe um termo técnico para isso na programação. E acho que isso é uma coisa boa, porque indica que a operação é normal e ortogonal .
Ortogonalidade nas linguagens de programação significa que você pode usar uma instrução / operação independente do seu contexto . Por exemplo, você pode chamar uma função / método das seguintes maneiras e se comportaria da mesma maneira ...
Você pode ler mais sobre ortogonalidade em programação na Wikipedia e há uma pergunta sobre StackOverflow sobre isso.
fonte
Eu realmente não sou tão bom com termos, mas acabei de ler um artigo, há alguns dias, que se referia ao termo Funções de ordem superior , e aqui está um resumo da definição por Wikipedia:
http://en.wikipedia.org/wiki/Higher-order_function
Portanto, nesse caso, como esse cenário tem pelo menos uma função como entrada / parâmetro, seria considerada uma função de ordem superior, acredito.
fonte
func1(func2, func3)
. Observe o parêntese ausente.