SlideShare una empresa de Scribd logo
1 de 53
Descargar para leer sin conexión
Programación
funcional con
λ
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.
¿funciones puras?
¿efectos secundarios?
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
¿Donde empieza la idea de utilizar las
funciones de esa forma?
Demos un vistazo al pasado…
Programación funcional
Historia
Entscheidungsproblem
Entscheidungsproblem
Entscheidungsproblem
Entscheidungsproblem
Entscheidungsproblem
Entscheidungsproblem
Entscheidungsproblem
Entscheidungsproblem
Entscheidungsproblem
Entscheidungsproblem
Entscheidungsproblem
ntscheidungsproblem
Programación funcional
Historia
¿Entscheidungsproblem?
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
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
Programación funcional
Historia
¿De qué se trata el cálculo lambda?
Programación funcional
Historia
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
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
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
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
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
Linea de tiempo de 

los lenguajes funcionales
Programación funcional
Historia
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
Programación funcional
¿Porqué ahora?
¿Porqué hoy en día los lenguajes están incluyendo
características funcionales?
• 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?
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
Imperativo Declarativo
Programación funcional
Cambio de pensamiento
Imperativo Declarativo
Programación funcional
Cambio de pensamiento
Ahora que sabemos que lo que importa es el cambio de
pensamiento, veamos algunas definiciones.
Programación funcional
Definiciones
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
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
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
Valores inmutables
Lo mismo sucede con las nuevas estructuras de ES6
Programación funcional
Definiciones
Funciones de orden superior
Este tipo de funciones toman otras funciones como parámetros o retornan otras
funciones como resultados.
Programación funcional
Definiciones
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
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
Muchos han estado usando la programación funcional sin
siquiera saberlo…
Programación funcional
Ejemplos en lenguajes
Javascript
Programación funcional
Ejemplos en lenguajes
Python
Programación funcional
Ejemplos en lenguajes
Swift
Programación funcional
Ejemplos en lenguajes
Java
Programación funcional
Ejemplos en lenguajes
C# (LINQ)
Programación funcional
Ejemplos en lenguajes
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
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
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
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
Creo que ahora si estamos avanzando…
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
+ FP
https://github.com/lodash/lodash/wiki/FP-Guide
Programación funcional
Librerías
O también podemos usar lenguajes funcionales que
compilan a Javascript…
Programación funcional
Librerías
Programación funcional
Librerías
Demos un vistazo a Scala.js.
Programación funcional
Scala.js
• 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
Programación funcional
Scala.js
Equivalencias js a Scala.js
https://www.scala-js.org/doc/sjs-for-js/es6-to-scala-part1.html
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
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
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
Gracias
marco@evolbit.net
http://blog.evolbit.net
@mordonez_me
https://www.facebook.com/groups/scalaperu/

Más contenido relacionado

La actualidad más candente

Funciones propias de visual basic
Funciones propias de visual basicFunciones propias de visual basic
Funciones propias de visual basicYesenia Bautista
 
Introducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje CIntroducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje CDiego Santimateo
 
4.2 Programación con action script
4.2 Programación con action script 4.2 Programación con action script
4.2 Programación con action script German Barajas Ferral
 
Conceptos iniciales de programación 4.2
Conceptos iniciales de programación 4.2Conceptos iniciales de programación 4.2
Conceptos iniciales de programación 4.2Cindy Gonzalez
 
ED 03 1_listas
ED 03 1_listasED 03 1_listas
ED 03 1_listasA J
 
Estructuras dinamicas ppt
Estructuras dinamicas pptEstructuras dinamicas ppt
Estructuras dinamicas pptAby Castillo
 
Kit de supervivencia para Java 8 : como prepararse para Java 9
Kit de supervivencia para Java 8 :  como prepararse para Java 9Kit de supervivencia para Java 8 :  como prepararse para Java 9
Kit de supervivencia para Java 8 : como prepararse para Java 9Eudris Cabrera
 
Tema 1: Introducción a la programación funcional.
Tema 1: Introducción a la programación funcional.Tema 1: Introducción a la programación funcional.
Tema 1: Introducción a la programación funcional.José A. Alonso
 
Insercion directa
Insercion directaInsercion directa
Insercion directaabelpit2
 
La estructura basica_para_c_
La estructura basica_para_c_La estructura basica_para_c_
La estructura basica_para_c_GamePlayer35
 

La actualidad más candente (20)

FUNCIONES LENGUAJE C
FUNCIONES LENGUAJE CFUNCIONES LENGUAJE C
FUNCIONES LENGUAJE C
 
Funciones propias de visual basic
Funciones propias de visual basicFunciones propias de visual basic
Funciones propias de visual basic
 
Introducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje CIntroducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje C
 
4.2 Programación con action script
4.2 Programación con action script 4.2 Programación con action script
4.2 Programación con action script
 
Conceptos iniciales de programación 4.2
Conceptos iniciales de programación 4.2Conceptos iniciales de programación 4.2
Conceptos iniciales de programación 4.2
 
Pascal
PascalPascal
Pascal
 
ED 03 1_listas
ED 03 1_listasED 03 1_listas
ED 03 1_listas
 
Método de insercion
Método de insercionMétodo de insercion
Método de insercion
 
Estructuras dinamicas ppt
Estructuras dinamicas pptEstructuras dinamicas ppt
Estructuras dinamicas ppt
 
Funciones
FuncionesFunciones
Funciones
 
Apuntes scilab
Apuntes scilabApuntes scilab
Apuntes scilab
 
Programación Java
Programación JavaProgramación Java
Programación Java
 
Funciones en Lenguaje C
Funciones en Lenguaje CFunciones en Lenguaje C
Funciones en Lenguaje C
 
Kit de supervivencia para Java 8 : como prepararse para Java 9
Kit de supervivencia para Java 8 :  como prepararse para Java 9Kit de supervivencia para Java 8 :  como prepararse para Java 9
Kit de supervivencia para Java 8 : como prepararse para Java 9
 
Tema 1: Introducción a la programación funcional.
Tema 1: Introducción a la programación funcional.Tema 1: Introducción a la programación funcional.
Tema 1: Introducción a la programación funcional.
 
Insercion directa
Insercion directaInsercion directa
Insercion directa
 
La estructura basica_para_c_
La estructura basica_para_c_La estructura basica_para_c_
La estructura basica_para_c_
 
Unidad 4
Unidad 4Unidad 4
Unidad 4
 
Jhonny
JhonnyJhonny
Jhonny
 
4.2
4.24.2
4.2
 

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

Lenguajes de programación
Lenguajes de programaciónLenguajes de programación
Lenguajes de programaciónjograci
 
Paper programacion funcional bondades
Paper programacion funcional  bondadesPaper programacion funcional  bondades
Paper programacion funcional bondadesSantiago Casallas
 
Funciones lenguaje c modulo4
Funciones lenguaje c modulo4Funciones lenguaje c modulo4
Funciones lenguaje c modulo4flaquita_dany
 
FUNCIONES EN LENGUAJE C
FUNCIONES EN LENGUAJE CFUNCIONES EN LENGUAJE C
FUNCIONES EN LENGUAJE Cflaquita_dany
 
Programacion web
Programacion webProgramacion web
Programacion webIACSA
 
Copiade documento(2)
Copiade documento(2)Copiade documento(2)
Copiade documento(2)Pato Brito
 
ESTRUCTURA DE DATOS
ESTRUCTURA DE DATOSESTRUCTURA DE DATOS
ESTRUCTURA DE DATOSIsai Vazquez
 
TRABAJO SOBRE LOS CONCEPTOS BASICOS DE PROGRAMACION 10-1 .pdf
TRABAJO SOBRE LOS CONCEPTOS BASICOS DE PROGRAMACION 10-1 .pdfTRABAJO SOBRE LOS CONCEPTOS BASICOS DE PROGRAMACION 10-1 .pdf
TRABAJO SOBRE LOS CONCEPTOS BASICOS DE PROGRAMACION 10-1 .pdfSebastianOcampo34
 
TRABAJO SOBRE LOS CONCEPTOS BASICOS DE PROGRAMACION 10-1 .pdf
TRABAJO SOBRE LOS CONCEPTOS BASICOS DE PROGRAMACION 10-1 .pdfTRABAJO SOBRE LOS CONCEPTOS BASICOS DE PROGRAMACION 10-1 .pdf
TRABAJO SOBRE LOS CONCEPTOS BASICOS DE PROGRAMACION 10-1 .pdfSebastianOcampo34
 
Introduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdfIntroduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdfcursosrams
 
Logica computacional conceptos basicos
Logica computacional conceptos basicosLogica computacional conceptos basicos
Logica computacional conceptos basicosmoni26011993
 

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

Lenguajes de programación
Lenguajes de programaciónLenguajes de programación
Lenguajes de programación
 
Paper programacion funcional bondades
Paper programacion funcional  bondadesPaper programacion funcional  bondades
Paper programacion funcional bondades
 
Funciones lenguaje c modulo4
Funciones lenguaje c modulo4Funciones lenguaje c modulo4
Funciones lenguaje c modulo4
 
Presentación y políticas del curso
Presentación y políticas del cursoPresentación y políticas del curso
Presentación y políticas del curso
 
FUNCIONES EN LENGUAJE C
FUNCIONES EN LENGUAJE CFUNCIONES EN LENGUAJE C
FUNCIONES EN LENGUAJE C
 
11funciones 1231096290787715-2
11funciones 1231096290787715-211funciones 1231096290787715-2
11funciones 1231096290787715-2
 
TIPOS DE DATOS MATLAB
TIPOS DE DATOS MATLABTIPOS DE DATOS MATLAB
TIPOS DE DATOS MATLAB
 
Programacion web
Programacion webProgramacion web
Programacion web
 
Copiade documento(2)
Copiade documento(2)Copiade documento(2)
Copiade documento(2)
 
ESTRUCTURA DE DATOS
ESTRUCTURA DE DATOSESTRUCTURA DE DATOS
ESTRUCTURA DE DATOS
 
Taller de programación
Taller de programaciónTaller de programación
Taller de programación
 
Progra
PrograProgra
Progra
 
Programacion Funcional
Programacion FuncionalProgramacion Funcional
Programacion Funcional
 
Introduccion a haskell
Introduccion a haskellIntroduccion a haskell
Introduccion a haskell
 
TRABAJO SOBRE LOS CONCEPTOS BASICOS DE PROGRAMACION 10-1 .pdf
TRABAJO SOBRE LOS CONCEPTOS BASICOS DE PROGRAMACION 10-1 .pdfTRABAJO SOBRE LOS CONCEPTOS BASICOS DE PROGRAMACION 10-1 .pdf
TRABAJO SOBRE LOS CONCEPTOS BASICOS DE PROGRAMACION 10-1 .pdf
 
TRABAJO SOBRE LOS CONCEPTOS BASICOS DE PROGRAMACION 10-1 .pdf
TRABAJO SOBRE LOS CONCEPTOS BASICOS DE PROGRAMACION 10-1 .pdfTRABAJO SOBRE LOS CONCEPTOS BASICOS DE PROGRAMACION 10-1 .pdf
TRABAJO SOBRE LOS CONCEPTOS BASICOS DE PROGRAMACION 10-1 .pdf
 
Apuntes scilab
Apuntes scilabApuntes scilab
Apuntes scilab
 
Introduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdfIntroduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdf
 
Logica computacional conceptos basicos
Logica computacional conceptos basicosLogica computacional conceptos basicos
Logica computacional conceptos basicos
 
Kimberly (3)
Kimberly (3)Kimberly (3)
Kimberly (3)
 

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

  • 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.
  • 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
  • 19. Programación funcional ¿Porqué ahora? ¿Porqué hoy en día los lenguajes están incluyendo características funcionales?
  • 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
  • 28. Valores inmutables Lo mismo sucede con las nuevas estructuras de ES6 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
  • 42. Creo que ahora si estamos avanzando…
  • 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
  • 45. O también podemos usar lenguajes funcionales que compilan a Javascript… Programación funcional Librerías
  • 47. Demos un vistazo a Scala.js. Programación funcional Scala.js
  • 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. 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. 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