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

Crea una cuenta o inicia sesión

¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera

Funciones puras

4/39
Recursos

¿Qué es una función pura?

Las funciones puras, también conocidas como "pure functions" en inglés, son un concepto crucial en el mundo de la programación funcional. Estas funciones tienen una característica esencial: siempre producen el mismo resultado para los mismos parámetros de entrada, independientemente del contexto o del entorno en el que se ejecuten. Imagina una función simple que suma dos números; si siempre sumas 5 y 3, el resultado será siempre 8. No importa si la ejecutas en una computadora local o en un servidor remoto, o si es martes o jueves; el resultado es predecible y constante.

¿Por qué son importantes las funciones puras?

Las funciones puras presentan varias ventajas significativas en el desarrollo de software:

  • Determinismo: Puedes predecir fácilmente el resultado al saber los parámetros de entrada. Esto es invaluable cuando escribes pruebas para tu código, ya que permite crear casos de prueba consistentes y confiables.

  • Ausencia de efectos secundarios: Las funciones puras no alteran el estado del sistema. Esto significa que no cambian una base de datos, no crean archivos ni modifican otras partes del software. Su aislamiento del sistema garantiza que no afecten a otros componentes.

  • Facilidad de prueba y mantenimiento: Al no depender de factores externos ni modificar el estado del sistema, resulta más sencillo probar y mantener el código en proyectos complejos.

¿Cómo identificar una función pura?

La identificación de una función pura puede parecer sencilla, pero requiere atención a ciertos detalles:

  • Resultados Consistentes: La función debe retornar el mismo resultado siempre que se le pase el mismo conjunto de argumentos. Por ejemplo, una función que cálcula potencias siempre devolverá el mismo resultado para el mismo exponente.

  • Sin estados compartidos: Una función pura no debe depender de variables globales o datos que puedan cambiar durante la ejecución del programa. Esto asegura que su comportamiento se mantenga constante.

  • Sin efectos secundarios: Como ya mencionamos, una función pura no altera el estado del mundo externo. Esto significa que no debe interactuar directamente con el sistema de archivos, bases de datos, o interfaces de red.

Ejemplos prácticos de funciones puras

En el mundo de la programación, un ejemplo clásico de función pura en Java sería una que verifica la disponibilidad de un saldo:

public boolean isBalanceAvailable(double balance) {
    return balance >= 0;
}

En este caso, isBalanceAvailable simplemente evalúa si el saldo es positivo. No cambia el estado del saldo ni afecta al sistema, lo que la convierte en una función pura.

¿Qué son las funciones impuras?

Las funciones que no poseen las características de las funciones puras se denominan funciones impuras. Estas pueden generar efectos secundarios o depender de variables externas, lo que las hace menos predecibles y más difíciles de probar y mantener. Un ejemplo clásico sería una función que escribe datos a una base de datos o que modifica un archivo de texto.

Interacción entre funciones puras e impuras

Existen reglas claras sobre cómo deben interactuar estas funciones entre sí:

  • Función pura invocando a otra pura: Esto es perfectamente válido y mantiene la previsibilidad y el determinismo de la ejecución.

  • Función pura invocando a una impura: Esto es algo que debe evitarse, ya que rompe la pureza de la función y su capacidad de generar resultados predecibles.

Comprender estas distinciones ayuda a los desarrolladores a crear aplicaciones más robustas y fáciles de mantener, promoviendo un diseño de software más limpio y eficiente.

Aportes 19

Preguntas 2

Ordenar por:

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

  • Función pura: determinista (resultado predecible). Fácil de probar. Su resultado será siempre el mismo al recibir siempre los mismos parámetros. No dependen del contexto, siempre generará el mismo resultado y no generará efectos secundarios, es decir no afectará datos de entrada ni otros datos relativos a otros flujos de datos. No dependen del estado del sistema.

  • Función impura: no determinista. Dependen del estado del sistema. Dependen de su contexto. Pueden generar efectos secundarios, es decir, pueden afectar a otros flujos de datos o verse afectadas por otros flujos de datos subyacentes. No son predecibles.

  • Una función pura puede invocar a una función pura, pero no a una impura. Si una función pura invoca a una impura se transformará entonces en una función impura ya que la naturaleza de la impura hará impredecible el resultado de la función pura, ya sea por resultado o por los efectos secundarios y contexto que impliquen la función pura.

Siempre es bueno explicar la teoria antes de entrar a la practica, Genial.

Ejemplo función pura vs impura:

// impura
var minimo = 18;
var checarEdad = function(edad) {
return edad >= minimo;
};
// pura
var checarEdad = function(edad) {
var minimo = 18;
return edad >= minimo;
};
En la impura, la var_mininmo es global, por lo tanto su estado puede cambiar(mutable), una misma entrada podría dar resultados distintos, dependiendo de su estado.

Fuente:https://sg.com.mx/revista/49/pura-felicidad-funciones-puras

Recomiendo visitar este blog.

Profe Sinuhé Jaime Valencia que buen curso necesitamos mas cursos asi de bien explicados super me encanta este tema

Un funcion pura siempre genera el mismo resultado para el mismo parametro

Yo cuando veo una funcion en la que no puedo predecir su comportamiento:

Funciones puras e impuras

Las funciones pueden categorizarse según diferentes criterioss, permitiendo definir tipos de funciones.

Para que una función se considere pura debe cumplir con los siguientes criterios:

  • Dado una misma entrada, debe devolver siempre el mismo resultado, por ejemplo suma(1, 2) siempre será 3.
  • Funciona en aislamiento: No depende del estado del estado actual del sistema (archivos, registros en la base de datos, día del mes, etc).
  • Son deterministas: El resultado es predecible (esto facilita el testing).
  • No modifica el valor de los parámetros (si se pasó x = 3 como parámetro, luego de ejecutar la función x seguirá valiendo 3).
  • No genera efectos secundarios: No cambia el estado del sistema (no modifica archivos, base de datos ni estado de objetos en memoria).
  • Si llama a otras funciones, éstas también deben ser puras.

Las funciones que no cumplan alguna de estas características (que no sean puras) se las considerará impuras.

las funciones pura son deterministica y tiene aislamiento

Excelente explicación instructor Sinuhé, pensando en los proyectos que he realizado creo que solo he manejado funciones puras ya que prácticamente todas han sido deterministas y estoy ansioso de ver una función impura en acción para comprender mejor estas diferencias.

In Java, a pure function is a function that has the following two properties:

  • The return value of the function depends only on the input parameters passed to the function.

  • The execution of the function has no side effects.

Esto significa que es idempotente ls funcion pura?
o este termino no aplica para esteos casos?

y si X= -3, entonces daria -27, ya no seria pura la función, o si?

Funciones puras

Generan el mismo resultado para los mismos parámetros, además no dependen del estado del sistemas, podemos predecir el resultado de la función pura es decir son deterministas.

FUNCIONES PURAS
-Retornan el mismo valor al pasarles el mismo parámetro.
-No dependen del contexto.
-Son deterministas
-No generan efectos secundarios
-NO puede invocar una funcion impura.

Las funciones puras no tienen dependencias de funciones impuras ya que dejarían de ser puras , por lo que no tendrían resultados predecibles

Muy Buena Explicacion

Las funciones puras son aquellas cuyo comportamiento siempre sera predecible, no dependen de variables ajenas a ella y cuyo resultado bajo los mismos parámetros deben ser siempre iguales, ejemplo de ello la función de suma o exponencial. Caso contrario las funciones impuras son aquellas cuyo comportamiento depende de factores o variables ajenas a ella y cuyo resultado no siempre es predecible (o no de manera simple).

Funciones Puras e Impuras… Entendido 😃 gracias!