¿Qué es una función pura?
Bueno, una función pura se ve así, tenemos una función, así que en lugar de una caja que teníamos antes
de objetos de todas estas funcionalidades, piense en esto como una simple función.
Y digamos que le damos una lista que contiene uno, dos y tres.
Si damos esta entrada a esta función, lo que esperaríamos con una función pura es que le suceda
algo a esta entrada que siempre resulte en lo mismo.
Entonces digamos que multiplicamos esto por dos, recibiríamos dos, cuatro y seis.
Ahora bien, una función pura tiene dos reglas.
Una es que dada la misma entrada, siempre devolverá la misma salida, es decir, cada vez que le damos uno, dos y tres
a esta lista, se lo damos a una función que creamos.
Siempre debe devolver el mismo resultado.
Entonces, si ejecuto esta función millones de veces con la misma entrada, debería dar como resultado la misma salida.
Y el segundo punto es que esta idea de función no debería producir efectos secundarios.
¿Cuáles son los efectos secundarios?
Los efectos secundarios son cosas que funcionan.
¿Eso afecta al mundo exterior?
Por ejemplo, si imprimiera algo dentro de esta función, afectaría al mundo exterior, ¿verdad?
Porque estoy imprimiendo algo en una pantalla.
La pantalla es el mundo exterior.
O, por ejemplo, si esta función tocaba una variable que vivía fuera de un ámbito diferente, ese es
un efecto secundario.
Echemos un vistazo.
Un código para entender un poco más este concepto.
Digamos que tenemos una función y luego esta función se multiplicará.
Por a una lista, así que digamos un aliado, que será nuestra lista, y aquí lo que queremos hacer
es recorrer el elemento.
En el último.
Y luego, cada elemento que queremos multiplicar y agregar a una nueva lista.
Así que creemos una nueva lista que será una lista vacía.
Y aquí, diremos nueva lista, punto adjunto.
Y hazlo multiplicado por dos.
Y finalmente, al final de esta función, queremos devolver la nueva lista.
Intentemos esto.
Si digo multiplicar por dos y darle uno, dos, tres y vamos a imprimir.
Aquí, la salida.
Si hago clic, corre.
Recibo dos, cuatro, seis.
¿Es esta una función pura? Pensemos en esto.
La primera regla da la misma entrada, es decir uno, dos y tres.
Siempre devolverá el mismo resultado, no importa cuántas veces lo ejecute, siempre me dará
el mismo resultado.
Entonces, está bien, pasamos la primera prueba.
¿Qué pasa con la segunda prueba que no produce efectos secundarios?
¿Produce esto algún efecto secundario?
¿Esto toca algo en el mundo exterior?
Piénsalo.
No, no escribe nada en el mundo exterior para esta función.
Porque todo está contenido aquí.
Si, por ejemplo, en lugar de tener imprimir aquí, simplemente tenemos imprimir.
Y aquí.
Si hago clic, corre.
Obtenemos el mismo resultado, pero ¿esto tiene efectos secundarios?
Bueno, sí lo hace.
Interactúa con el mundo exterior, que es la declaración impresa.
La declaración de impresión me dice, oye, voy a imprimir en cualquier pantalla que tenga esta máquina.
En nuestro caso, se imprimirá aquí, pero no sabemos realmente qué hace la declaración de impresión porque
interactúa con la pantalla de este lado.
Así que esto.
Efectos secundarios, le damos control a la impresión, pero no sabemos qué va a hacer la impresión.
Otro ejemplo que te puedo dar.
¿Es esto qué pasa si tenemos una nueva lista aquí que realmente definimos afuera?
Al igual que.
Para que tengamos una nueva lista como esta, si hago clic en ejecutar.
Todavía llego a cuatro, seis, pero ¿esto tiene efectos secundarios?
Bueno, sí lo hace.
Interactúa con el mundo exterior y lo que está fuera de este mundo de una función
que recuerda, es el alcance, bueno, interactúa con esta nueva lista.
Le pasa a esta nueva lista.
Entonces, si aparece un programador y tal vez antes de ejecutar esta función, decidimos decir nueva lista.
Lo cambiamos a una cadena vacía.
Bueno, cuando ejecuto esta función.
Recibo un error porque ahora esta nueva lista es un objeto de cadena.
Entonces, la nueva lista que vive en el mundo exterior de esta función puede ser modificada por otro desarrollador o
por un programa y no lo sabríamos.
Y cuando ejecutamos esta función, nos dará un error.
Tiene un efecto secundario.
Entonces, idealmente, contenemos nuestras funciones.
Y hazlos puros, porque, como puedes ver, nunca vamos a tener un bug o un error en nuestro código a
menos que escribamos algo mal aquí, sino porque no nos importa el mundo exterior, porque
todo lo que dar como entrada siempre producirá una buena salida, será pura.
Ahora bien, es difícil entender realmente por qué este es un concepto tan poderoso sin tener un poco de experiencia en el lugar
de trabajo.
Pero déjame decirte esto, eso cuando tienes funciones puras.
Tiene menos código con errores, puede probar mejor su código.
Es más fácil entender su código y en general.
Tienes estos beneficios de no tener diferentes partes de tu código, tocarse y afectarse entre sí, lo
que hace que tu vida como programador sea mucho más fácil.
Entonces, esta idea de funciones puras es realmente importante.
Pero lo único que quiero que aprendas de esto es que las funciones puras son más una guía que
un absoluto.
Es imposible tener funciones puras en todas partes porque si una función no afecta en absoluto al mundo
exterior, bueno, no tendríamos ningún programa.
No podríamos mostrar cosas.
No podríamos guardar cosas como nuestro perfil de juego.
Entonces es imposible tener funciones puras en todas partes.
Sin embargo, cuando puede, donde puede, la programación funcional nos enseña que sus funciones son buenas.
Intente crear funciones puras y solo tenga algunas funciones no puras que tal vez interactúen con el mundo
exterior al que podamos volver cada vez que tengamos errores en nuestro código, porque lo más probable
es que esas sean las que tengan errores, luego funciones puras como esto para finalizar nuestro concepto de programación funcional.
Si, por ejemplo, este fuera nuestro asistente de los videos anteriores con programación funcional, tendríamos
un objeto asistente.
O el diccionario Wizzard que tenía nombre.
Digamos Marlon.
Y poder.
De 50.
Y en lugar de contenerlos en una clase, tendría diferentes métodos, como el ataque.
Y esto no sería un método, sería una función porque no vive dentro de una clase.
En programación funcional, dicen, oye, no necesitamos combinar datos con funciones, mantengamos esos
datos separados, solo creemos funciones puras que puedan pasarse como un carácter.
Y de esta manera, mantenemos esas dos cosas separadas para que podamos enfocarnos en funciones puras y podamos enfocarnos en
datos, así que ahí es donde está la diferencia.
Al final del día, se trata de tratar de mantener nuestro abrigo limpio y evitar errores en nuestro abrigo, un gran
problema que los programadores tienen todo el tiempo.
Entonces es solo una forma diferente de pensar.
Aprendamos un poco más en el siguiente video.