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. ¿Donde empieza la idea de utilizar las
funciones de esa forma?
Demos un vistazo al pasado…
Programación funcional
Historia
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. 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
11. ¿De qué se trata el cálculo lambda?
Programación funcional
Historia
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. 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. 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. 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. 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. Linea de tiempo de
los lenguajes funcionales
Programación funcional
Historia
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
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. 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
24. Ahora que sabemos que lo que importa es el cambio de
pensamiento, veamos algunas definiciones.
Programación funcional
Definiciones
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. 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. 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
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. 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. 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. Muchos han estado usando la programación funcional sin
siquiera saberlo…
Programación funcional
Ejemplos en lenguajes
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. 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. 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. 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
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
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
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. 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. 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