Composición de funciones (informática)

De Wikipedia, la enciclopedia libre

En ciencias de la computación, la composición de funciones es un acto o mecanismo para combinar funciones simples para construir otras más complicadas. Al igual que la función compuesta 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.

Frecuentemente se aplican funciones a los resultados de otras funciones siendo permitido por casi todos los lenguajes de programación. En algunos casos, la composición de funciones se puede usar como función por sí misma. Tal función siempre se puede definir, pero los lenguajes con función de primera clase lo hacen más fácil.

La capacidad de componer fácilmente funciones fomenta la modularización para mantener y reutilizar el código . En términos más generales, los grandes sistemas pueden construirse mediante la composición de programas.

La composición de funciones se aplica a las funciones que operan en una cantidad finita de datos, y cada paso se procesa secuencialmente. Las funciones que operan en datos potencialmente infinitos (codatos) se conocen como filtros y, en cambio, están conectadas en un flujo (pipeline), análoga a la composición de funciones y que puede ejecutarse simultáneamente .

Componer llamadas a funciones[editar]

Por ejemplo, supongamos que tenemos dos funciones f y g, como en z = f(y) & y = g(x) . Componerlos significa que primero calculamos y = g(x), y luego usamos y para calcular z = f(y) . Un ejemplo en Python:

def g(x):
    #...

def f(y):
    #...

y = g(x)
z = f(y)

Los pasos se pueden combinar:

z = f(g(x))

Estas dos implementaciones calculan el mismo resultado. La segunda implementación requiere solo una línea de código y se conoce coloquialmente como "altamente compuesto". La legibilidad y, por lo tanto, la capacidad de mantenimiento es una de sus ventajas, ya que requieren menos líneas de código, lo que minimiza el tamaño de un programa.[1]​ DeMarco y Lister verifican empíricamente una relación inversa entre el área superficial y la 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 mantenible.

Nombrar composición de funciones[editar]

Supongamos que la combinación de llamar a f() en el resultado de g() es frecuentemente útil, y que queremos llamar foo() para que se use como una función por sí misma.

En la mayoría de los lenguajes, podemos definir una nueva función implementada por composición. Ejemplo en Python:

def foo(x):
  return f(g(x))

Composición de primera clase[editar]

En los lenguajes de programación funcional, la composición de funciones se puede expresar naturalmente como una función u operador de orden superior . En otros lenguajes de programación, se puede escribir mecanismos propios para realizar la composición de funciones.


Véase también[editar]

Notas[editar]

  1. Cox (1986), pp. 15–17
  2. DeMarco y Lister (1995), pp. 133–135.

Referencias[editar]