Introducción a la programación Funcional

1

¿Qué es la Programación Funcional?

Entendiendo las partes de la programación funcional

2

¿Qué es una función en Java?

3

Funciones como ciudadanos de primera clase

4

Funciones puras

5

Entendiendo los efectos secundarios

6

Funciones de orden mayor

7

Funciones lambda

8

Inmutabilidad

Functional Programming en Java

9

Repositorio del curso

10

Configuración del entorno de trabajo

11

Revisando el paquete java.util.function: Function

12

Revisando el paquete java.util.function: Predicate

13

Revisando el paquete java.util.function: Consumer y Supplier

14

Revisando el paquete java.util.function: Operators y BiFunction

15

Entendiendo dos jugadores clave: SAM y FunctionalInterface

16

Operador de Referencia

17

Analizando la inferencia de tipos

18

Comprendiendo la sintaxis de las funciones lambda

19

Usando metodos default en nuestras interfaces

20

Dándole nombre a un viejo amigo: Chaining

21

Entendiendo la composición de funciones

Optional y Streams: Datos mas interesantes

22

La clase Optional

23

Entendiendo los Streams

24

¿Qué son los Stream listeners?

25

Operaciones y Collectors

26

Streams de tipo específico y Paralelismo

27

Operaciones Terminales

28

Operaciones Intermedias

29

Collectors

Todo junto: Proyecto Job-search

30

job-search: Un proyecto para encontrar trabajo

31

Vista rápida a un proyecto de Gradle

32

Revisando las opciones para nuestro CLI

33

Librerías adicionales para nuestro proyecto

34

Entendiendo la API de jobs

35

Diseñando las Funciones Constructoras de nuestro Proyecto

36

Agregando validaciones de datos

37

Diseñando las funciones de transformacion de datos

38

Creando flujos extras de transformación de Datos

Conclusiones

39

Un repaso a lo aprendido

Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Usando metodos default en nuestras interfaces

19/39
Recursos

Aportes 10

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Personalmente me confundí un poco con esta clase porque no había visto antes una interfaz funcional con más de un método. Por eso me puse a investigar un poco más en los docs y se los comparto:

Escencialmente una interfaz con la anotación @FunctionalInterface solo puede tener 1 método abstracto. Como los métodos default tienen una implementación no son abstractos y por lo tanto no rompen el contrato de @FunctionalInterface.

También me surgió una duda respecto al método asociado a la lambda: ¿podríamos hacer StringOperation op = text -> {} (asociar la lambda a operate(String) en lugar de a getAmout())?. La respuesta es inmediata y obvia: No. Si pudiesemos hacer lo anterior getAmount() no tendría una definición y eso es imposible, generaría un error de compilación.

Default
Es una keyword que permite añadir un comportamiento por defecto a la interfaz.

Por medio de los métodos default en las interfaces vamos a poder crear una estructura base para las funciones, en especial pre-establecer que parámetros tomaran.
 
Muchas gracias por la explicación instructor Sinuhé.

Default nos da la posibilidad de definir un comportamiento base para la interface y asi definir a su vez que parametros seran necesarios.

Default en una interfaz nos permitirá implementar un método.

@FunctionalInterface, esta anotación nos permite contar con método sin definir y también método default.

Muy buenas ideas de aplicación al final de la clase

Un error que me ocurrió cuando experimenté con los métodos default fue cuando intenté hacer que una clase implementara dos interfaces que tenían la misma cabecera del método default. Java reconoce que hay un cuerpo y no nos permite continuar la compilación si no se resuelve.

Como las interfaces son abstracciones de comportamiento, Java nos permite hacer una sobre-escritura del método y hacer como que no hay cuerpo en ninguno de los métodos default para resolver esta ambigüedad. Esto es lo que pasaría (frecuentemente) si se permitiera herencia múltiple en Java.

default nos permite crear un metodo vacio o no devuelve nada

Super 😃

Genial