|
| 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 | +} |
0 commit comments