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

Librer铆as adicionales para nuestro proyecto

33/39
Recursos

Aportes 17

Preguntas 3

Ordenar por:

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

Enlaces de las librerias:
JCommander
Feign Core
Feign Gson

Excelente explicaci贸n, deber铆an existir m谩s cursos con este tutor

  • jcommander: Toma los argumentos y genera objetos de java

  • feign-core: Es el responsable de hacer peticiones web.

  • feign-gson: Convierte de json a objetos de java.

Librerias a帽o 2022:
// https://mvnrepository.com/artifact/com.beust/jcommander
implementation group: 鈥榗om.beust鈥, name: 鈥榡commander鈥, version: 鈥1.82鈥
// https://mvnrepository.com/artifact/io.github.openfeign/feign-core
implementation group: 鈥榠o.github.openfeign鈥, name: 鈥榝eign-core鈥, version: 鈥11.9.1鈥
// https://mvnrepository.com/artifact/io.github.openfeign/feign-gson
implementation group: 鈥榠o.github.openfeign鈥, name: 鈥榝eign-gson鈥, version: 鈥11.9.1鈥

Lor aqui dejo las dependencias actualizadas al 2021 馃槂!

dependencies {
    // https://mvnrepository.com/artifact/com.beust/jcommander
    implementation group: 'com.beust', name: 'jcommander', version: '1.81'
    // https://mvnrepository.com/artifact/io.github.openfeign/feign-core
    implementation group: 'io.github.openfeign', name: 'feign-core', version: '11.2'
    // https://mvnrepository.com/artifact/com.google.code.gson/gson
    implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.7'

}

En nuestro archivo de [gradle] agregamos 3 dependencias.
Estas tres dependencias (librerias) nos van a facilitar crear nuetro proyecto.
Las tres dependencia son librerias que vamos a estar utilizando a lo largo del proyecto.

  • jcommander: tomara los argumentos que pasamos al programa por terminal y nos genera objetos de java que podremos manipular o revisar lo que aya pasado por terminal.

  • feign-core: se encargara de hacer peticiones web, hara llamadas a la API de GitHub y nos devolvera un resultado como #response que viene en formato de Json. asi que tenemos que convertir de Json a objeto de Java.

  • feign-Gson: tomara el resultado en Json, lo procesara y nos dara clases y objetos de Java que podremos manipular y utilizar en el proyecto.

鈥淏ecause life is too short to parse command line parameters鈥 (Jcommander)

Para applicaciones de consola recomiendo usar para java picocli y jline tiene muchas funcionalidades necesarias para app de consola

https://picocli.info/
https://github.com/jline/jline3

Es importante aclarar que no se llaman Librer铆as, la palabra en Ingl茅s Library significa Biblioteca, asi que esa es la palabra adecuada en espa帽ol.

Currently, I鈥檓 working with java 17, if it鈥檚 your situation as well, you need to change this to avoid issues when building the project with Gradle:

File: gradle-wrapper.properties -->
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

File: build.gradle -->
plugins {
    id 'java'
    id 'application'
}

group 'com.platzi'
version '0.1.0'

sourceCompatibility = 1.17

application {
   mainClassName = "com.platzi.jobsearch.JobSearch"
}

repositories {
    mavenCentral()
}

dependencies {
    // https://mvnrepository.com/artifact/com.beust/jcommander
    implementation group: 'com.beust', name: 'jcommander', version: '1.82'

    // https://mvnrepository.com/artifact/io.github.openfeign/feign-core
    implementation group: 'io.github.openfeign', name: 'feign-core', version: '12.0'

    // https://mvnrepository.com/artifact/io.github.openfeign/feign-gson
    implementation group: 'io.github.openfeign', name: 'feign-gson', version: '12.0'

}

(I want to practice English, feel free to correct me if I鈥檓 mistaken)

Maven Repository, el npm de Java? 馃憖 馃摝

Librer铆as utilizadas * jcommander: tomara los argumentos que pasamos al programa por terminal y nos genera objetos de java que podremos manipular o revisar lo que aya pasado por terminal. * feign-core: se encargara de hacer peticiones web, hara llamadas a la API de GitHub y nos devolvera un resultado como #response que viene en formato de Json. asi que tenemos que convertir de Json a objeto de Java. * feign-Gson: tomara el resultado en Json, lo procesara y nos dara clases y objetos de Java que podremos manipular y utilizar en el proyecto.

El repositorio que tienes en github no tiene ninguna de las clases src, el repo que tienes ac谩 en platzi, repite dos archivos buid.gradle y no puede encontrar la clase main

En nuestro archivo de [gradle] agregamos 3 dependencias. Estas tres dependencias (librerias) nos van a facilitar crear nuetro proyecto. Las tres dependencia son librerias que vamos a estar utilizando a lo largo del proyecto. * jcommander: tomara los argumentos que pasamos al programa por terminal y nos genera objetos de java que podremos manipular o revisar lo que aya pasado por terminal. * feign-core: se encargara de hacer peticiones web, hara llamadas a la API de GitHub y nos devolvera un resultado como #response que viene en formato de Json. asi que tenemos que convertir de Json a objeto de Java. * feign-Gson: tomara el resultado en Json, lo procesara y nos dara clases y objetos de Java que podremos manipular y utilizar en el proyecto.

Gracias 馃槂

Muchas gracias por explicar las dependencias y compartir el enlace al sitio web Maven Repository nos vendr谩 bien al momento de buscar paquetes de clases para futuros proyectos.

Genial, asi quedarian las dependencias:

dependencies{

// https://mvnrepository.com/artifact/com.beust/jcommander
compile group: 'com.beust', name: 'jcommander', version: '1.78'

// https://mvnrepository.com/artifact/io.github.openfeign/feign-core
compile group: 'io.github.openfeign', name: 'feign-core', version: '11.0'

// https://mvnrepository.com/artifact/io.github.openfeign/feign-gson
compile group: 'io.github.openfeign', name: 'feign-gson', version: '11.0'


}```