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

Dándole nombre a un viejo amigo: Chaining

20/39
Recursos

Aportes 17

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Wow! Siempre me había preguntado cómo es que se hacía algo así. Cuando hago APIs en Java, me encuentro muy seguido con esto:

Es interesante como el profesor explica cosas que usualmente un programador utiliza diariamente y no conoce el “como” y “por que” funciona.

Chaining o Encadenamiento


El Chaining o encadenamiento consiste en hacer llamadas consecutivas a diferentes metodos de un mismo objeto.

Un ejemplo claro es al utilizar la clase StringBuilder, esta permite encadenar llamadas al objeto creado inicialmente para manipular la creación de un String.

StringBuilder stringBuilder = new StringBuilder();
String s = stringBuilder.append("Hola") // Agrega el texto "Hola"
        .append(" world")               // Agrega el texto " world"
        .delete(5, 10)                  // Borra el texto "world" (por índices)
        .append("mundo")                // Agrega el texto "mundo"
        .reverse()                      // Invierte el texto
        .toString();                    // Lo convierte a String (termina la cadena)
System.out.println(s);                  // Imprime "odnum aloH"

La explicación detrás de este comportamiento es que cada una de las funciones aplica el cambio correspondiente y devuelve una referencia al mismo objeto (return this;), lo que hace posible llamar otra función sin perder el cambio realizado en la anterior.

estoy un poco confundido pense que esto se llamaba patron builder, en donde podia instanciar un elemento con los atributos de la clase que yo seleccionara.
Employee employee = new Builder().name(“John”).lastName(“Doe”).department(“Accounting”).build();

Es lo mismo o en algo difiere??

Chaining es un ecadenamiento de llamadas

Bueno, por lo menos yo no sabia esto. Gracias

Aprendidos muchos conceptos que aplican en Python, Php, Javascript, Rust, Golang etc. Me encanta entender la parte conceptual de esto, pero verla en un ejemplo verlo. Explicado. Excelente curso.

hice un ejemplo pocho con hates ou yeaaa

package com.platzi.functional._10_chaining.data;

import com.platzi.functional._06_reference_operator.TestArea;

import java.util.AbstractList;
import java.util.ArrayList;
import java.util.List;

public class HotDogs {
    public static void main(String[] args) {
        Hate hSinTochino = new Hate();
        hSinTochino.agregarIngrediente("Sin tocino")
                .agregarIngrediente("Crema")
                .agregarIngrediente("Tomate")
                .agregarIngrediente("Catsu")
                .dondeComer("Para llevar")
                .cantidadDeHates(2);
        System.out.println(hSinTochino);
    }
    /*
    * Se crea una clase statica de un objeto, en la cual los métodos de ella returnean siempre el propio objeto
    * por lo cual se le pueden seguir aplicando los otros metodos, de esta manera, se puede, por ejemplo crear un hate
    * pasandole los ingredientes, podria haber otro metodo, indicando por ejemplo si es para llevar, cuantos pedirá y
    * se seguirian pudiendo usar siempre y cuando se devuelvan en todos los métodos el propio objeto, es como
    * andarse pasando una papa cacliente
    * */
    static class Hate{
        ArrayList<String> ingredientes = new ArrayList<>();
        int cantidadHates;
        String dondeComer;
        public Hate() {
            this.ingredientes.add("Salchicha");
            this.ingredientes.add("Pan");
        }

        public Hate agregarIngrediente(String ingrediente){
            ingredientes.add(ingrediente);
            return this;
        }
        public Hate dondeComer(String ubicacion){
            this.dondeComer = ubicacion;
            return this;
        }

        public Hate cantidadDeHates(int cantidad){
            this.cantidadHates = cantidad;
            return this;
        }

        @Override
        public String toString() {
            return
                    "Ingredientes:    "+ingredientes.toString() + "\n" +
                    "Cantidad:        " + cantidadHates + "\n"+
                    "Pa donde se fue: " + dondeComer;
        }
    }
}

Este profe explica bien y sin relleno irrelevante.

Este concepto se llama fluent interface

Chaining es el resultdo de una ejecucion con respecto a otra ejecucion

Chaining no ayuda a encadenar funciones sin necesidad de guardar los resultados en variables

Excelente clase instructor Sinuhé, no conocía esta forma de encadenar funciones, la aprovechare y la implementare cuando vea la oportunidad.

super! tampoco conocía este concepto 😃

Muy interesante, es algo que me volvió loco cuando empecé a aprender a programar con Java. Y al final es algo que aprendí con la práctica sin darme cuenta.
Ahora soy totalmente consciente gracias a esta explicación.

Muchas gracias, ahora entiendo la funcioinalidad de chaining.

El Chaining nos da la posibilidad de encadenar una seria de procedimientos sobre un objeto dado.