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

¿Cómo crear un punto de entrada para un proyecto en Java?

Al comenzar un proyecto en Java, es crucial definir un punto de entrada. Este sirve como el arranque de la aplicación, ayudando a organizar y manejar el flujo del proyecto. El primer paso consiste en crear un paquete que contendrá nuestras clases. En este caso, llamaremos al paquete com.platzi.

¿Cómo se define una clase principal?

Para que nuestro proyecto tenga un punto de inicio claro, creamos una clase principal. Realizaremos lo siguiente:

  • Creamos la clase principal, por ejemplo, llamada Main, dentro del paquete com.platzi.
  • Añadimos un método home que se encargará de gestionar la funcionalidad inicial.
package com.platzi;

public class Main {
    public static void main(String[] args) {
        // Código del método home
        System.out.println("Hola, Platzi!");
    }
}

¿Cómo configurar Gradle para facilitar la ejecución?

Gradle nos ayudará a gestionar la compilación y ejecución del proyecto. Debemos indicar a Gradle cuál es nuestra clase principal mediante el archivo de configuración build.gradle.

application {
    mainClassName = 'com.platzi.Main'
}

Esto permite que Gradle compile y ejecute nuestro proyecto con facilidad.

¿Qué librerías usar para potenciar un proyecto Java?

Para trabajar de manera eficiente, existen librerías que simplificarán tareas complejas como la manipulación de datos recibidos por terminal, peticiones web y la conversión de respuestas JSON a objetos Java.

Yargs Commander: ¿Qué es y cómo se utiliza?

Yargs Commander es una librería excelente para transformar los argumentos recibidos por terminal en objetos Java. Esto nos ofrece la posibilidad de manejar argumentos de manera estructurada y efectiva.

¿Cómo realizar peticiones web fácilmente con Feign?

Feign es la librería que se encargará de realizar las peticiones a APIs. Reduce significativamente el código necesario para interactuar con APIs, permitiendo una integración más sencilla en nuestros proyectos.

¿Cómo se transforma JSON en objetos Java con Gson?

Finalmente, para convertir las respuestas JSON en objetos Java, podemos utilizar Gson, una popular librería desarrollada por Google. Esto nos asegura que podemos trabajar con estructuras de datos más complejas de manera efectiva y eficiente.

¿Cómo integrar todas las dependencias en Gradle?

Para utilizar estas librerías, las agregaremos al bloque de dependencias en build.gradle:

dependencies {
    implementation 'com.beust:jcommander:1.78'
    implementation 'io.github.openfeign:feign-core:11.0'
    implementation 'com.google.code.gson:gson:2.8.8'
}

Estas dependencias facilitan la creación y ejecución del proyecto, permitiéndonos enfocarnos en problemas de lógica y diseño en vez de reinventar la rueda.

Consejos y recomendaciones finales

  • Explora otras librerías: Hay muchas herramientas disponibles que pueden simplificar tu desarrollo.
  • Mantén el código limpio: Facilita el mantenimiento y la adición de nuevas funcionalidades en el futuro.
  • Sigue aprendiendo: El mundo del desarrollo en Java es vasto; nunca dejes de buscar nuevas formas de mejorar tus habilidades.

Lanzarte al proyecto con estos pasos te permitirá tener una base sólida sobre la cual construir y te ahorrará tiempo mientras te enfocas en resolver problemas más complejos. ¡Sigue aprendiendo y experimentando!

Aportes 16

Preguntas 3

Ordenar por:

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

Excelente explicación, deberían existir más cursos con este tutor

Librerias año 2022:
// 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: ‘11.9.1’
// https://mvnrepository.com/artifact/io.github.openfeign/feign-gson
implementation group: ‘io.github.openfeign’, name: ‘feign-gson’, version: ‘11.9.1’

  • 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.

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.

“Because 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’m working with java 17, if it’s 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’m 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'


}```