Composición de funciones (informática)


En informática , la composición de funciones es un acto o mecanismo para combinar funciones simples para construir otras más complicadas. Al igual que la composición habitual de funciones en matemáticas , el resultado de cada función se pasa como argumento de la siguiente, y el resultado de la última es el resultado del todo.

Los programadores aplican con frecuencia funciones a los resultados de otras funciones, y casi todos los lenguajes de programación lo permiten. En algunos casos, la composición de funciones es interesante como una función por derecho propio, para ser utilizada posteriormente. Esta función siempre se puede definir, pero los lenguajes con funciones de primera clase lo hacen más fácil.

La capacidad de componer funciones fácilmente fomenta la factorización (separación) de funciones para la capacidad de mantenimiento y la reutilización del código . De manera más general, los grandes sistemas pueden construirse componiendo programas completos.

Hablando en términos estrictos, la composición de funciones se aplica a funciones que operan en una cantidad finita de datos, cada paso lo procesa secuencialmente antes de pasarlo al siguiente. Las funciones que operan en datos potencialmente infinitos (una secuencia u otros codatos ) se conocen como filtros y, en su lugar, se conectan en una tubería , que es análoga a la composición de funciones y se puede ejecutar simultáneamente .

Por ejemplo, suponga que tenemos dos funciones f y g , como en z = f ( y ) e y = g ( x ) . Componerlos significa que primero calculamos y = g ( x ) , y luego usamos y para calcular z = f ( y ) . Aquí está el ejemplo en el lenguaje C :

A pesar de las diferencias de longitud, estas dos implementaciones calculan el mismo resultado. La segunda implementación requiere solo una línea de código y se la conoce coloquialmente como una forma "altamente compuesta". La legibilidad y, por tanto, la facilidad de mantenimiento es una ventaja de los formularios altamente compuestos, ya que requieren menos líneas de código, lo que minimiza el "área de superficie" de un programa. [1] DeMarco y Lister verifican empíricamente una relación inversa entre área de superficie y mantenibilidad. [2] Por otro lado, puede ser posible abusar de formas muy compuestas. Un anidamiento de demasiadas funciones puede tener el efecto contrario, haciendo que el código sea menos fácil de mantener.