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

Adquiere por un a帽o todos los cursos, escuelas y certificados por un precio especial.

Antes: $249

Currency
$219/a帽o

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Comprar ahora

Termina en:

1D
6H
4M
17S

D谩ndole nombre a un viejo amigo: Chaining

20/39
Recursos

Aportes 16

Preguntas 1

Ordenar por:

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

o inicia sesi贸n.

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 鈥渃omo鈥 y 鈥減or 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(鈥淛ohn鈥).lastName(鈥淒oe鈥).department(鈥淎ccounting鈥).build();

Es lo mismo o en algo difiere??

Chaining es un ecadenamiento de llamadas

Bueno, por lo menos yo no sabia esto. Gracias

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.