Drupal Costa Rica

Programacion Funcional Reactiva

Aplicada a JavaScript

Alberto Cole

  • https://cr.linkedin.com/in/alberto-cole-palacios-88623474

  • twitter.com/hybrisCole
  • skype: alberto.cole

JavaScript All The Things!

Naturaleza JS

  • Porque JavaScript?
  • Para qué se usaba JS?
  • Para qué se usa JS actualmente?
  • FRP al rescate :)

Declarativo (FP)

  • Encapsula implementación del sistema
  • Uso de expresiones que describen la logica sin especificar su flujo

Imperativo (OOP)

  • Secuencia que cambia el estado del sistema.
  • Descripción y evaluación juntas
var array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
for(let i = 0; i < array.length; i++) {
   array[i] = Math.pow(array[i], 2);
}
array; //-> [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map(num => Math.pow(num, 2));

Funciones Puras

  • Promueven inmutabilidad
  • Solo trabajan con los parámetros recibidos pero no los modifica
  • No genera cambios fuera del scope de la función
  • Es difícil trabajar con this
  • Reutilización de codigo
  • Modularizacion, una cosa a la vez

Inmutabilidad

  • Datos no se modifican una vez creados
  • Objetos por referencia***
  • state is the root of all evil
  • Comparación de objetos
  • Persistencia / Histora
  • Immutable.js

"functional programming refers to the declarative evaluation of pure functions to create immutable programs by avoiding externally observable side effects."

- Luis Atencio

Functional Programming In Javascript

FP vs OOP

  • JavaScript utiliza ambos
  • ES6 ""class""
  • encapsulamiento + herencia
  • inmutabilidad + composicion
  • Polimorfismo de funciones = trabajan con cualquier dato 
  • JS esta fuertemente basado en llamados de código asincrónico, entonces tiene mas sentido en trabajar orientado a funciones
  • JS Functions = Master Race
  • High Order Functions

FRP

  • Async Pyramid of Hell
  • Dependencias Temporales
  • Mix Sync/Async
  • Sub categoria de FP
  • Promise Monad / async/await
  • Observables
  • Manejar eventos de manera funcional
  • Dividir complejidad en tareas pequeñas

Links de Interés

  • https://www.manning.com/books/functional-reactive-programming
  • https://www.manning.com/books/functional-programming-in-javascript
  • https://gist.github.com/staltz/868e7e9bc2a7b8c1f754
  • github.com/hybrisCole
  • https://github.com/Reactive-Extensions/RxJS
  • https://dev.twitter.com/rest/public
  • pubnub.com
  • https://mobxjs.github.io/mobx/
  • victory.formidable.com

Drupal Costa Rica

By Alberto Cole Palacios