Awesome
Tu código puede ser mejor y puedo demostrarlo matemáticamente
Charla para Meetup.js Argentina sobre Programación Funcional
Descripción
Programación funcional. El último grito de la moda, pero solo para aquellos dispuestos a sumergirse en la terminología. No más. Sin matemática ni formulas, la programación funcional ya esta entre nosotros, y ha llegado para quedarse. Con esta charla espero sacar a la luz distintos conceptos que ya manejamos en nuestro día a día, y demostrar que detrás de las palabras raras y los diagramas se esconde una herramienta más para hacer nuestro código mejor.
Por último, también espero hacerle el camino un poco más fácil a quien quiera profundizar en los fundamentos de la teoría de categorías.
Slides
Archivo
TODO
Preparar ejemplos (código)Introducción Comparación jquery/arrays/promisesGeneralidades CurryingGeneralidades Type signaturesGeneralidades Composición de funcionesProblema 1Problema 2Problema 3Paréntesis bind para arraysPromises De then a fmapPromises ExtrasPromises Control de flujoLazy promises Funciones/thunksLazy promises ImplementaciónControl de flujo ImplementaciónTeoría de categorías Simplificar map/compose
Preparar scriptDraftIterarDefinir slides
Preparar slidesDraftIterar
Incorporar feedbackAjustar slidesAjustar readmeAjustar script
- Timear y ajustar contenido
Indice
Motivación
- Programación funcional ➞ Conceptos matemáticos ➞ Wikipedia ➞ Fracaso
- Comparación visual. jQuery/Arrays/Promises.
Lo Básico
- Funciones. Currying.
- Composición de funciones
Tipos
- Tipos. Tipos primitivos.
- Type signature.
Entornos
- Descripción
- Ejemplo: Array
- ⟹ Son tipos ellos mismos
Tipos derivados. Polimórficos/monomórficos.
Caso 1
- Usar funciones de elementos sobre los entornos
- Array ➞ map. fmap.
Caso 2
- Iniciar el calculo a partir de un elemento (o usar
f: [ x ] ➞ x
) - Constructor/return/unit.
Caso 3
- Usar
f: x ➞ [ x ]
sobre listas - Flatten/join
Resumen
- De que nos sirvió todo esto?
- Listar operaciones.
bind.[ x ] ➞ (x ➞ [ x ]) ➞ [ x ]
bind f = join (fmap f)
[=flatmap]
Promises
- Que representan
- Listar operaciones.
then. Expresar como función estática. curry. fmap o chain?"Extras" de Promise (lift return values)Promesas de Promesas? No existencia de join? then = chain!- Control de flujo Reject/Resolve. Manejo de errores. Comparación con callbacks.
Lazy Promises
- Delegación de ejecución/funciones/thunks. Lazy.
- fmap
- join
- do/fork
Control de flujo sincrónico
- Either
- fmap
- join
- chain
- do/either
Teoría de Categorías
Categoría, definición.Categoría de tipos y funciones tipadas en JSCategoría de tipos array y funciones sobre tipos array en JSSubcategoríaFunctor(Pointed Functor)Monad- Axiomas/Leyes
- Simplificar map/compose
Referencias
- JS Professor Frisby's Mostly Adequate Guide to Functional Programming by Brian Lonsdorf
- HS Functors, Applicatives, And Monads In Pictures by Aditya Bhargava
- HS Haskell/Category theory (Wikibooks)
- JS Translation from Haskell to JavaScript of selected portions of the best introduction to monads I’ve ever read by James Coglan
- HS You Could Have Invented Monads! (And Maybe You Already Have.) by Dan Piponi
- HS Functors are Containers by Bartosz Milewsk
- JS Faster JavaScript Through Category Theory by John Bender
- JS Category theory for JavaScript programmers by Mike Stay
- Category theory (Wikipedia)
- Monad (Wikipedia)