Sé que obj.func1().func2()
se llama encadenamiento de métodos, pero cuál es el término técnico para:
func1(func2(), func3());
Donde el retorno de una función se usa como argumento para otra.
terminology
zhenka
fuente
fuente
obj.func1().func2() is called method chaining
- Corrección: se llama choque de trenes.obj.func1()
siempre devuelve un objeto que tienefunc2()
como función miembro.Respuestas:
No creo que sea composición de funciones. La composición de funciones significa tomar dos o más funciones y convertirlas en una nueva función, como
f . g . h
en Haskell. Tenga en cuenta que no se llama a ninguna función en este momento.Personalmente, me referiría a construcciones
func1(func2(), func3())
como "llamadas de función anidadas".fuente
f(g())
está haciendo es llamarf()
con una expresión para el primer argumento, y sucede que la llamada a la funcióng()
califica como una expresión. Pero si tiene que haber un nombre para él, esto es lo más cercano posible.En matemáticas, se llama composición de funciones . Sin embargo, no creo haber escuchado el término aplicado a la programación. Eso puede deberse a que el uso se evita en gran medida por algunas razones. Puede introducir errores extraños cuando las funciones tienen efectos secundarios, debido a que los compiladores son libres de evaluar func3 antes de func2. Es más difícil de depurar porque no puede establecer puntos de interrupción o imprimir resultados intermedios, y la mayoría de las personas simplemente les resulta más difícil de leer.
fuente
printf("%d %d\n", strlen(a), strlen(b));
lugar de usar variables intermedias.func1(func2(func3(x)))
. O técnicamente, se refiere a las funciones mismos: sig(x) = f1(f2(f3(x)))
, a continuación,g
( nog(x)
) es la composición def1
,f2
yf3
. Si bien pude ver una forma en que podría llamar a la estructura en la pregunta "composición de funciones", me parece un uso muy inusual del término, en un sentido matemático.Como señala @Karl Bielefeldt, se llama composición de funciones en matemáticas.
No hay término técnico para esto en la programación. Y creo que esto es bueno, porque indica que la operación es normal y ortogonal .
La ortogonalidad en los lenguajes de programación significa que puede usar una instrucción / operación independiente de su contexto . Por ejemplo, puede llamar a una función / método de todas las formas siguientes, y se comportaría igual ...
Puede leer más sobre Ortogonalidad en Programación en Wikipedia , y hay una pregunta sobre StackOverflow sobre esto.
fuente
Realmente no soy tan bueno con los términos, pero hace unos días leí un artículo que hace referencia al término Funciones de orden superior , y aquí hay un resumen de la definición según Wikipedia:
http://en.wikipedia.org/wiki/Higher-order_function
así que en este caso, dado que ese escenario toma al menos una función como entrada / parámetro, creo que se consideraría una función de orden superior.
fuente
func1(func2, func3)
. Tenga en cuenta el paréntesis ausente.