‫¿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 que importe 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 error 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 se pueden pasar 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.