Composición de Funciones en Programación Funcional
Clase 21 de 39 • Curso de Programación Funcional con Java SE
Contenido del curso
- 2

Funciones en Programación Funcional: Conceptos Básicos
03:15 - 3

Funciones como Ciudadanos de Primera Clase en Programación
02:39 - 4

Funciones Puras: Concepto y Ejemplos Prácticos
04:05 - 5

Efectos Secundarios en Programación y su Impacto en el Código
03:12 - 6

Funciones de Orden Superior en Programación
02:28 - 7

Funciones Lambda en Programación Funcional Java
03:30 - 8

Inmutabilidad de Datos en Programación Funcional con Java
11:16
- 9
Programación Funcional en Java SE: Conceptos y Prácticas
00:06 - 10

Programación Funcional en Java: Práctica y Ejemplos en IntelliJ
02:48 - 11

Programación Funcional en Java: Creación y Uso de Funciones
04:03 - 12

Programación Funcional con Predicados en Java
04:57 - 13

Interfaz Consumer y Supplier en Java: Uso y Ejemplos Prácticos
03:54 - 14

Funciones Java para Transformación de Datos y Operaciones Binarias
07:10 - 15

Creación y Uso de Interfaces Funcionales Personalizadas en Java
08:51 - 16

Métodos de Referencia en Programación Funcional Java
04:46 - 17

Inferencia de tipos en Java: funciones y métodos
03:53 - 18

Uso de Expresiones Lambda en Java: Sintaxis y Aplicaciones
12:47 - 19

Interfaz Funcional en Java: Creación y Uso de Métodos Default
04:59 - 20

Encadenamiento de Llamadas en Programación Orientada a Objetos
03:52 - 21

Composición de Funciones en Programación Funcional
06:06
- 22

Uso de la Clase Optional en Java para Manejo de Valores Nulos
12:59 - 23

Manipulación de Streams en Java: Operaciones y Limitaciones
10:18 - 24

Programación Funcional en Java: Uso de Streams y Operaciones Terminales
07:21 - 25
Operaciones de Stream en Java: Intermedias y Finales
05:05 - 26

Operaciones y Concurrente con Stream en Java
05:51 - 27
Operaciones Terminales en Java Streams
06:18 - 28
Operaciones Intermedias en Streams de Java
09:21 - 29

Conversión de Strings a Listas de Enteros en Java
06:14
- 30

Construcción de Proyecto para Buscar Empleo Usando APIs
01:17 - 31

Configuración y Uso de Gradle en Proyectos Java con IntelliJ
03:23 - 32

Creación de una Herramienta de Búsqueda de Trabajo en Terminal
01:51 - 33

Creación de Puntos de Entrada y Dependencias en Proyectos Java
05:54 - 34

Creación de APIs RESTful con Feign y Spring Boot
09:31 - 35

Creación de una Interfaz de Línea de Comandos con JCommander
13:05 - 36

Validación de Argumentos en Terminal con Clases en Ciel
04:32 - 37

Procesamiento de Argumentos y Solicitudes API en Java
11:38 - 38

Creación de API para búsqueda de empleos con Java y CLI
08:31
¿Qué son las funciones de orden mayor?
Las funciones de orden mayor son una parte fascinante y esencial de la programación funcional. Este tipo de funciones puede tomar como parámetro otra función o devolver una función como resultado. También pueden darse ambos casos a la vez. Esto nos permite crear composiciones de funciones, donde podemos combinar múltiples funciones para realizar tareas más complejas.
¿Cómo se implementan las funciones de orden mayor en un ejemplo concreto?
Para ilustrar el poder de las funciones de orden mayor, iniciaremos creando una función para multiplicar un número. Supongamos que tenemos la siguiente función:
fun multiplicarPorTres(numero: Int): Int {
return numero * 3
}
Esta función multiplicarPorTres toma un número y lo multiplica por tres. Es sencillo, sin embargo, podemos aprovechar el concepto de funciones de orden mayor para ampliar esta operación.
¿Cómo se combinan funciones utilizando composición?
La composición de funciones nos permite crear cadenas de funciones, donde el resultado de una función se convierte en la entrada de otra. Considera el siguiente ejemplo:
fun sumarUnoYMultiplicarPorTres(numero: Int): Int {
return multiplicarPorTres(numero + 1)
}
En este caso, primero se agrega uno al número, y luego el resultado se multiplica por tres usando la función multiplicarPorTres. Así hemos creado una función combinada llamada sumarUnoYMultiplicarPorTres.
Para monitorear los pasos de ejecución, podemos imprimir mensajes en consola usando println:
fun sumarUnoYMultiplicarConDebug(numero: Int): Int {
println("Agregando uno a $numero")
val resultado = multiplicarPorTres(numero + 1)
println("Multiplicando el resultado por tres")
return resultado
}
Al ejecutar la función, se imprime cada paso, permitiendo un seguimiento detallado del proceso.
¿Es posible extender una función con pasos adicionales?
No solo podemos componer funciones para ejecutar pasos antes de una función, sino también realizar acciones adicionales después de su ejecución. Supongamos que deseamos elevar al cuadrado el resultado de sumarUnoYMultiplicarPorTres:
fun elevarAlCuadradoDespues(numero: Int): Int {
val resultado = sumarUnoYMultiplicarPorTres(numero)
println("Elevando $resultado al cuadrado")
return resultado * resultado
}
Al usar esta función, primero se ejecuta la composición de funciones que hemos visto antes, y después se realiza la operación adicional de elevar al cuadrado.
Al ejecutar la función con un número, por ejemplo, 3, el orden de ejecución será:
- Agregar uno a
3, obteniendo4. - Multiplicar
4por3, obteniendo12. - Finalmente, elevar
12al cuadrado para obtener144.
Este flujo demuestra cómo podemos usar funciones de orden mayor y composición para crear secuencias de operaciones complejas y personalizadas.
¿Por qué es importante el uso de funciones de orden mayor y composición?
Las funciones de orden mayor y la composición son fundamentales para escribir código más limpio y modular. Permiten:
- Reutilización del código: Al desglosar lógicas complejas en pequeñas funciones, es fácil reutilizar y combinar estas funciones en diferentes contextos.
- Mantenimiento y legibilidad del código: Las funciones claras y específicas hacen que el código sea más fácil de leer y mantener.
- Escalabilidad: Podemos agregar o modificar funcionalidades sin reescribir todo el código.
Así, estas técnicas son herramientas poderosas para cualquier desarrollador que busque escribir un código eficiente y escalable. ¡Sigue explorando las posibilidades de las funciones de orden mayor y descubre cómo pueden transformar tu manera de programar!