Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)

128 visualizaciones

Publicado el

Presentación para el CoreUpgrade 2018 de HackSpace en Cusco y Lima.

Publicado en: Software
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)

  1. 1. Programación funcional con λ
  2. 2. Programación funcional Definición La programación funcional es un paradigma de programación declarativa basado en el uso de funciones puras, sin efectos secundarios.
  3. 3. ¿funciones puras? ¿efectos secundarios?
  4. 4. En términos simples… Utilizar funciones que lo único que hacen es procesar los datos de entrada y retornar el resultado. Siempre que la entrada sea la misma, el resultado también lo será. Programación funcional Historia
  5. 5. ¿Donde empieza la idea de utilizar las funciones de esa forma? Demos un vistazo al pasado… Programación funcional Historia
  6. 6. Entscheidungsproblem Entscheidungsproblem Entscheidungsproblem Entscheidungsproblem Entscheidungsproblem Entscheidungsproblem Entscheidungsproblem Entscheidungsproblem Entscheidungsproblem Entscheidungsproblem Entscheidungsproblem ntscheidungsproblem Programación funcional Historia
  7. 7. ¿Entscheidungsproblem?
  8. 8. David Hilbert 1862 - 1943 En 1928 planteó el Entscheidungsproblem (problema de decisión), buscaba un procedimiento capaz de determinar si S era un teorema, donde S es una proposición de lógica de primer orden (ej. ∀x∃y x = y + y). Programación funcional Historia
  9. 9. Alonzo Church 1903 - 1995 Diseñó un sistema formal llamado calculo lambda el cual utilizó para demostrar que el problema de decisión (Entscheidungsproblem) era irresoluble. Propuso la definición de calculabilidad efectiva a cualquier función que sea “λ-definible”, dicho en otras palabras, que pueda ser programada en el calculo lambda, el día de hoy conocemos esa conjetura como la tesis de Church. Programación funcional Historia
  10. 10. Programación funcional Historia
  11. 11. ¿De qué se trata el cálculo lambda? Programación funcional Historia
  12. 12. En el cálculo lambda, las funciones son anónimas, se utiliza el símbolo lambda para definirlas y solo reciben un valor de entrada. f(x) = x * x sería equivalente a λx.x*x f(x,y) = x - y sería equivalente a λx.λy.x - y Programación funcional Lambda Calculus
  13. 13. El concepto central en cálculo lambda es la “expresión”. <expresión> := <variable> | <abstracción> | <aplicación> <abstracción> := λ <variable>.<expresión> <aplicación> := <expresión><expresión> abstracción := λx.x aplicación := (λx.x)y expresión := (λx.x)((λx.x)y) Programación funcional Lambda Calculus
  14. 14. Variables ligadas y variables libres. λx.xy En la función anterior decimos que la variable x es ligada porque está definida luego del símbolo lambda y es utilizada en el cuerpo de la función (en el mismo contexto). La variable y es libre porque no se encuentra en el contexto local de la expresión Programación funcional Lambda Calculus
  15. 15. Sustitución [(uv)/x] (λy.x(λw.vwx)) => λy.uv(λw.vw(uv)) [(λy.xy)/x] (λy.x(λx.x)) => λy.(λy.xy)(λx.x) //No termina… (λx. x x) (λx. x x) (λx. x x) (λx. x x) (λx. x x) (λx. x x) Programación funcional Lambda Calculus
  16. 16. Booleanos true := λx. λy.x false := λx. λy.y Aritmetica suma := λm.λn.λf.λx. m f ( n f x) succ := λn.λf.λx.f (n f x) Números 0 := λf . λx . x 1 := λf . λx . f x 2 := λf . λx . f (f x) 3 := λf . λx . f (f (f x)) Programación funcional Lambda Calculus
  17. 17. Linea de tiempo de 
 los lenguajes funcionales Programación funcional Historia
  18. 18. Clojure (2007) F# (2005) Scala (2004) Haskell (1990) Erlang (1986) Miranda (1985) FP (1977) ML (1973) ISWIM (1966) LISP (1960) Rich HickeyMartin OderskyJoe ArmstrongJhon BackusPeter Landin MicrosoftComité internacional (Yale y Glasgow) David TurnerRobert MilnerJohn McCarthy Programación funcional Historia
  19. 19. Programación funcional ¿Porqué ahora? ¿Porqué hoy en día los lenguajes están incluyendo características funcionales?
  20. 20. • En ciencias de la computación, las buenas ideas suelen tomarse muchos años después. Simula 67 (1967) fue el primer lenguaje orientado a objetos pero solo con la aparición de c++ (1983) OOP se volvió popular. • Con el paso de los años los problemas se han vuelto más complejos y resolverlos implica ejecutar tareas en paralelo (hilos) y/o de forma distribuida (cloud). La programación funcional elimina el problema de sincronización de estado. • Al trabajar con funciones puras y eliminar los efectos secundarios, los programas tienden a ser más confiables y más fáciles de testear. Programación funcional ¿Porqué ahora?
  21. 21. Lo más importante de programar funcionalmente no es el lenguaje ni la sintaxis sino el cambio de pensamiento. Programación funcional Cambio de pensamiento
  22. 22. Imperativo Declarativo Programación funcional Cambio de pensamiento
  23. 23. Imperativo Declarativo Programación funcional Cambio de pensamiento
  24. 24. Ahora que sabemos que lo que importa es el cambio de pensamiento, veamos algunas definiciones. Programación funcional Definiciones
  25. 25. Transparencia referencial Decimos que una expresión es transparentemente referencial si podemos reemplazar el valor de todas sus ocurrencias en el programa sin alterar el funcionamiento del mismo. Programación funcional Definiciones
  26. 26. Valores inmutables La modificación de los valores no existe, una vez creado ese valor no podrá mutar, lo que podemos hacer es crear nuevos valores a partir de los creados inicialmente. Programación funcional Definiciones
  27. 27. Valores inmutables No se modifican las estructuras, por ejemplo una nueva propiedad en un objeto o un nuevo elemento en un array usando push. Siempre debemos crear nuevos objetos. Programación funcional Definiciones
  28. 28. Valores inmutables Lo mismo sucede con las nuevas estructuras de ES6 Programación funcional Definiciones
  29. 29. Funciones de orden superior Este tipo de funciones toman otras funciones como parámetros o retornan otras funciones como resultados. Programación funcional Definiciones
  30. 30. Composición de funciones Podemos componer funciones para obtener una sola función (no incluído en js por defecto). Programación funcional Definiciones js Ramda
  31. 31. Recursividad Las iteraciones se realizan utilizando funciones recursivas. Programación funcional Definiciones Versión con optimización por cola (PTC) https://github.com/tc39/proposal-ptc-syntax
  32. 32. Muchos han estado usando la programación funcional sin siquiera saberlo… Programación funcional Ejemplos en lenguajes
  33. 33. Javascript Programación funcional Ejemplos en lenguajes
  34. 34. Python Programación funcional Ejemplos en lenguajes
  35. 35. Swift Programación funcional Ejemplos en lenguajes
  36. 36. Java Programación funcional Ejemplos en lenguajes
  37. 37. C# (LINQ) Programación funcional Ejemplos en lenguajes
  38. 38. A lo largo de la historia, el uso de variables e hilos no ha funcionado muy bien, veamos algunos ejemplos… Programación funcional Historias de la programación imperativa
  39. 39. Therac-25 Therac-25 fue una maquina de radio terapia que al contar con una falla de software causó la muerte de 3 pacientes y otros quedaron con daños por sobredosis de radiación. El diagnostico: Se determinó que el mal funcionamiento del programa era ocasionado por una condición de carrera, relacionada con el desbordamiento de una variable contadora. Wikipedia Programación funcional Historias de la programación imperativa
  40. 40. Apagón del noreste del 2003 Se produjo un apagón que afectó buena parte de Estados Unidos y parte de Canadá. El diagnostico: Un bug en el software en el sistema de alarma en el cuarto de control. La falla en la alarma dejo a los trabajadores inadvertidos del problema, el bug fue una condición de carrera que puso la alarma en un bucle infinito. Wikipedia Programación funcional Historias de la programación imperativa
  41. 41. Podemos utilizar programación funcional para cambiar el manejo de hilos con datos mutables y usar la naturaleza de la programación funcional para trabajar con datos inmutables. Programación funcional Historias de la programación imperativa
  42. 42. Creo que ahora si estamos avanzando…
  43. 43. Lo que hemos visto hasta ahora es solo la punta del iceberg, podemos utilizar algunas librerías para potenciar la programación funcional en Javascript. Programación funcional Librerías
  44. 44. + FP https://github.com/lodash/lodash/wiki/FP-Guide Programación funcional Librerías
  45. 45. O también podemos usar lenguajes funcionales que compilan a Javascript… Programación funcional Librerías
  46. 46. Programación funcional Librerías
  47. 47. Demos un vistazo a Scala.js. Programación funcional Scala.js
  48. 48. • Eliminación de errores de tipos • Código compartido entre cliente/servidor • Interoperabilidad con Javascript • Reversa de urls con chequeo de errores • Optimización y compresión de código • Parámetros call by name • Valores opcionales (undefined) • Valores inmutables (reales) • Pattern Matching • Estructuras de datos adicionales (tuplas, listas, entre otros) • For Comprehensions and guards (https:// docs.scala-lang.org/tour/for- comprehensions.html) • Funciones parcialmente aplicadas Programación funcional Scala.js Ventajas de Scala.js
  49. 49. Programación funcional Scala.js Equivalencias js a Scala.js https://www.scala-js.org/doc/sjs-for-js/es6-to-scala-part1.html
  50. 50. Temas de interés: Lambda Calculi de Alonzo Church https://www.amazon.com/Introduction-Mathematical-Logic-Alonzo-Church/dp/0691029067 An Unsolvable Problem of Elementary Number Theory http://www.jstor.org/stable/2371045 A note on the Entscheidungsproblem http://www.jstor.org/stable/2269326 Computable Numbers with an application to the Entscheidungsproblem https://www.cs.virginia.edu/~robins/Turing_Paper_1936.pdf Programación funcional Enlaces
  51. 51. Temas de interés: Learn Haskell http://learnyouahaskell.com/ Whatsapp utiliza Erlang http://www.wired.com/2015/09/whatsapp-serves-900-million-users-50-engineers/ Coursera está desarrollado en Scala http://www.typesafe.com/resources/case-studies-and-stories/making-online-education-accessible-with- typesafe Twitter migró de Ruby a Scala http://www.typesafe.com/resources/case-studies-and-stories/new-tweets-per-second-record-and-how Programación funcional Enlaces
  52. 52. Temas de interés: FunctionalWorks (jobs) https://jobs.functionalworks.com/ Why Spark is made with Scala https://www.quora.com/Why-is-Apache-Spark-implemented-in-Scala Manifiesto reactivo www.reactivemanifesto.org/es Programación funcional Enlaces
  53. 53. Gracias marco@evolbit.net http://blog.evolbit.net @mordonez_me https://www.facebook.com/groups/scalaperu/

×