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

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Entendiendo dos jugadores clave: SAM y FunctionalInterface

15/39
Recursos

Aportes 27

Preguntas 6

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Notes:

  1. SAM is the abbreviation of Single Abstract Method.

  2. A functional interface is an interface that contains only one abstract method. They can have only one functionality to exhibit. From Java 8 onwards, lambda expressions can be used to represent the instance of a functional interface. A functional interface can have any number of default methods. Runnable, ActionListener, Comparable are some of the examples of functional interfaces.Before Java 8, we had to create anonymous inner class objects or implement these interfaces.

  3. @FunctionalInterface annotation is used to ensure that the functional interface can鈥檛 have more than one abstract method. In case more than one abstract methods are present, the compiler flags an 鈥楿nexpected @FunctionalInterface annotation鈥 message. However, it is not mandatory to use this annotation.

Para evitar la validaci贸n de agregar ceros se puede mejorar utilizando el formateador de la siguiente forma:
String.format("%02d ", days);

Este curso me vuela el cerebro.

Interfaces SAM y FunctionalInterface

Java tiene incorporadas las interfaces necesarias para crear funciones que reciban uno o dos par谩metros de tipos diferentes, pudiendo especificar tambi茅n el tipo de retorno, pero tambi茅n es posible definir interfaces personalizadas que cumplan la misma funcion, pero que permita la utilizaci贸n de m谩s par谩metros o fijar su tipo para no tener que especificarlos al definirlas.

Para hacerlo, basta con crear una interf谩z SAM (Single Abstract Method) y agregar la anotaci贸n @FunctionalInterface

Por ejemplo, se puede definir una interfaz que permita crear funciones con tres par谩metros.

@FunctionalInterface
public interface TriFunction<T, U, V, R> {
    R apply(T t, U u, V v);
}

Su utilizaci贸n es similar a Function.

//       si x ____ y
// entonces z ____ ?
TriFunction<Integer, Integer, Integer, Double> reglaDeTres = (x, y, z) -> Double.valueOf(y * z / x);

Double resultado = reglaDeTres.apply(5, 30, 15); // retorna 90

Buenas, durante el v铆deo el profesor indica que lo que vamos a calcular la edad, pero existe un peque帽o error en el c贸digo. Lo que nuestra funci贸n calculateAge hace es obtener la diferencia de d铆as y con esto no se obtiene la edad. La correcci贸n es muy simple, solo se tiene que remplazar el getDays por getYears

Les comparto como quedar铆a la modificaci贸n

TriFunction<Integer,Integer,Integer,Integer> calculateAge =
                (day, month, year) -> Period.between(
                            parseDate.apply(day, month, year),
                            LocalDate.now()
                        ).getYears();

O se utiliza LocalDate#of(int year, int month, int dayOfMonth) en lugar de un hack innecesario.

Muchas gracias instructor Sinuh茅, entonces por medio del uso de SAM y FunctionalInterface tendremos una forma de crear funciones que utilicen m谩s de dos par谩metros de ingreso.

SAM --> Single Abstrab Method, Es una interfaz que tiene un solo m茅todo sin definir. Para ello decoramos con @FuctionalInterface. Nos permite crear nuestras propias funciones.

En mi caso getDays() no funciono de forma correcta, probe con getYears() y funciono sin problemas.

Super interesante esta clase y las posibilidades que ofrece

en mi trifuncion tuve que usar applay xq apply no me deja.

鈥淟a anotaci贸n @FunctionalInterface no es estrictamente necesaria para que una interfaz sea funcional, pero proporciona una forma expl铆cita de indicar las intenciones del programador. Adem谩s, el uso de la anotaci贸n permite que el compilador realice verificaciones adicionales, lo que ayuda a evitar errores al usar interfaces funcionales.鈥

now() = 2019

22:27

SAM es Single Abstract Method, es una interface que debe tener solo un m茅todo.

Functional Interface: para que un interface se vuelva funcional, tiene que ser una SAM, sino es as铆, Java no me va a dejar volverla funcional

Sin la anotacion tambien funciona.
en realidad el unico valor que le agrega la anotacion es que valida que tenga un solo metodo.

Aso no tenga la anotacion. sino si una intefaz solo tiene un metodo abtracto. es considerada funcional.

Vale entonces para hacer nuestras propias funciones Funcionales solo necesitamos de una interfaz y la anotaci贸n @FunctionalInterface que maravilla

Esta clase me encant贸, muy 煤til esta informaci贸n y el ejemplo est谩 perfecto aplicando lo visto hasta ahora.

Esta clase fue colosal, me encant贸.

en function addCeros que quiere decir el s铆mbolo 鈥?鈥

Muchas gracias

Genial 馃槂 gracias鈥 me corri贸 sin problemas el ejercicio 馃槂

Bien, me encant贸. Algo nuevo鈥 馃槈

Increible

public class AgeUtils {
    public static void main(String[] args) {
        Function<Integer, String> addZero = x -> x < 10 ? "0" + x : String.valueOf(x);

        ITryFunction<Integer, Integer, Integer, LocalDate> parseDate =
                (day, month, year) -> LocalDate.parse(year + "-" + addZero.apply(month) + "-" + addZero.apply(day));

        ITryFunction<Integer, Integer, Integer, Integer> calculateAge =
                (day, month, year) -> Period.between(parseDate.apply(day, month, year), LocalDate.now()).getYears();

        System.out.println(calculateAge.apply(13, 9, 1996));
    }

    @FunctionalInterface
    interface ITryFunction<T, U, V, R>{
        R apply(T t, U u, V v);
    }
}

Muy bien Explicado

Perfecto con esto puedo generar funciones simples a la medida del proyecto que estemos desarrollando, de manera de evitar que se repitan operaciones a lo largo del proyecto.

Define que una interfaz se va a usar como una funci贸n