Skip to content

Commit 5411e82

Browse files
committed
Revert "quitando ejemplos no vistos en clase"
This reverts commit 8d3ed9a.
1 parent 668dbf7 commit 5411e82

2 files changed

Lines changed: 148 additions & 0 deletions

File tree

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package com.platzi.functional._01_pure;
2+
3+
public class PureFunctions {
4+
/**
5+
* Aunque hoy dia conocemos a los metodos estaticos como metodos de clase o simplemente metodos estaticos,
6+
* en realidad un metodo puede ser considerado o visto como una funcion.
7+
* <p>
8+
* Basandonos en nuestra definicion de funcion, sabemos que para cada X genera una Y. En este caso,
9+
* nuestra "x" es en realidad el par (x, y) y nuestra "y" sera el resultado de sumarlas.
10+
* <p>
11+
* Habra algun cambio en el resultado si yo ejecuto 90 veces sum(3,5)?
12+
* <p>
13+
* La respuesta es: NO.
14+
* <p>
15+
* Una funcion pura no depende de estados exteriores (propiedades, objetos, variables
16+
* externas a su definicion, etc.) ni ve afectado su resultado por agentes externos.
17+
*/
18+
public static int sum(int x, int y) {
19+
return x + y;
20+
}
21+
22+
23+
/**
24+
* Imagina que la siguiente clase es parte de un sistema financiero
25+
*/
26+
static class Person {
27+
//Nos enfocaremos solo en esta propiedad por ahora…
28+
private double balance;
29+
30+
public Person(double balance) {
31+
this.balance = balance;
32+
}
33+
34+
public double getBalance() {
35+
return balance;
36+
}
37+
38+
public void setBalance(double balance) {
39+
this.balance = balance;
40+
}
41+
}
42+
43+
/**
44+
* Teniendo esta funcion, se le puede considerar pura?
45+
*/
46+
public static boolean hasAvailableFunds(double funds) {
47+
return funds > 0.0;
48+
}
49+
50+
51+
/**
52+
* La respuesta es: Si!
53+
* <p>
54+
* porque la funcion revisa unicamente si un numero es mayor a 0, no importa la referencia de donde vengan
55+
* los fondos, mientras esos fondos sean menores o iguales a 0, la respuesta siempre sera false.
56+
* <p>
57+
* Por otro lado, cuando una persona consigue fondos en su cuenta, la funcion en realidad no ve ese cambio.
58+
* Para la funcion la respuesta cambiara hasta que le den un nuevo valor a evaluar. La funcion no depende
59+
* de la presencia de los datos en ningun lugar o de un contexto.
60+
* <p>
61+
* Mira el ejemplo abajo:
62+
*/
63+
public static void main(String[] args) {
64+
Person sinuhe = new Person(-20.00);
65+
//False, Sinuhe esta endeudado hasta los dientes
66+
System.out.println(hasAvailableFunds(sinuhe.getBalance()));
67+
68+
Person ricardo = new Person(1300.00);
69+
//True, Ricardo tiene dinero disponible!
70+
System.out.println(hasAvailableFunds(ricardo.getBalance()));
71+
72+
//La funcion es evaluada al momento y no depende de que objeto es quien la manda a invocar,
73+
//es por ello que se considera pura.
74+
}
75+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package com.platzi.functional._02_sideeffects;
2+
3+
import java.io.BufferedReader;
4+
import java.io.File;
5+
import java.io.FileReader;
6+
import java.io.IOException;
7+
8+
public class SideEffects {
9+
10+
/**
11+
* Funcion impura, el resultado de ejecutarla puede ser observado desde fuera
12+
* del codigo. Por ejemplo en una consola.
13+
*/
14+
static void helloWorld() {
15+
System.out.println("Hello World!");
16+
}
17+
18+
19+
20+
21+
22+
23+
24+
25+
26+
/**
27+
* Funcion impura, depende de la existencia y el estado de un archivo,
28+
* eso provoca que sea no determinista
29+
* Que sucede si esta funcion se ejecuta en mi computadora y en tu computadora?
30+
* - Podemos determinar la salida en ambos casos?
31+
* - Como nos aseguramos que nadie mas este modificando el archivo?
32+
*/
33+
static boolean containsMexico(File file) {
34+
try (BufferedReader bfReader = new BufferedReader(new FileReader(file))) {
35+
String line;
36+
while ((line = bfReader.readLine()) != null) {
37+
if (line.contains("Mexico")) {
38+
return true;
39+
}
40+
}
41+
} catch (IOException ignored) {
42+
return false;
43+
}
44+
45+
return false;
46+
}
47+
48+
49+
50+
51+
52+
53+
54+
55+
56+
57+
58+
59+
60+
/**
61+
* Funcion impura. Aunque el codigo no esta implementado, con entender lo que hace
62+
* sabemos que es no determinista y que no podemos garantizar los resultados para
63+
* un cierto parametro
64+
*/
65+
static String getLastNameForGivenName(String name) {
66+
//Obtener una conexion a la Base de datos
67+
//Ejecutar un query en la base de datos
68+
//Revisar los resultados del query…
69+
//retornar el valor del lastName o un valor por default en caso de ausencia
70+
//...
71+
return "";
72+
}
73+
}

0 commit comments

Comments
 (0)