ADTs:

Viaje al centro de la programación funcional

Yo, me, myself, no ego at all

 

  • Background:
    • Licenciada el ciencias químicas
    • Doctora en física de sistemas complejos
  • Actualmente:
    • Desarrolladora front Openbank

@HenarMendiola

Outline

 

@HenarMendiola

  1. Programación Funcional: fundamentos

@HenarMendiola

  1. Programación Funcional: fundamentos
  2. Teoría de categorías y ADTs

Outline

 

@HenarMendiola

Outline

 

@HenarMendiola

  1. Programación Funcional: fundamentos
  2. Teoría de categorías y ADTs
  3. Funtores: 

Outline

 

@HenarMendiola

  1. Programación Funcional: fundamentos
  2. Teoría de categorías y ADTs
  3. Funtores: 
    1. Qué es un funtor

Outline

 

@HenarMendiola

  1. Programación Funcional: fundamentos
  2. Teoría de categorías y ADTs
  3. Funtores: 
    1. Qué es un funtor
    2. Ejemplo práctico

Outline

 

@HenarMendiola

  1. Programación Funcional: fundamentos
  2. Teoría de categorías y ADTs
  3. Funtores: 
    1. Qué es un funtor
    2. Ejemplo práctico
  4. Resumen y conclusiones

Outline

 

Programación funcional

 

@HenarMendiola

Programación funcional

Características

  • Declarativa
  • Funciones puras
  • Funciones de alto orden
  • Determinismo
  • Inmutabilidad

@HenarMendiola

Imperativa

¿Cómo?

Declarativa

¿Qué?

@HenarMendiola

Imperativa

¿Cómo?

@HenarMendiola

Declarativa

¿Qué?

@HenarMendiola

Funciones puras

  • Sin efectos secundarios.

 

  • Solo depende de sus argumentos

 

@HenarMendiola

Funciones puras

let pi=3,1416

let getLength=radius=>{
    return 2*pi*radius;
}

let newPi=()=>{
    pi=acos(-1,0);
}
let getLength=radius=>{
    return 2*acos(-1,0)*radius;
}

@HenarMendiola

Pura

Impura

Funciones puras

let pi=3,1416

let getLength=radius=>{
    return 2*pi*radius;
}

let newPi=()=>{
    pi=acos(-1,0);
}
let getLength=radius=>{
    return 2*acos(-1,0)*radius;
}

@HenarMendiola

Pura

Impura

Funciones puras

let pi=3,1416

let getLength=radius=>{
    return 2*pi*radius;
}

let newPi=()=>{
    pi=acos(-1,0);
}
let getLength=radius=>{
    return 2*acos(-1,0)*radius;
}

@HenarMendiola

Pura

Impura

Funciones de alto orden

@HenarMendiola

Determinismo

@HenarMendiola

Inmutabilidad

@HenarMendiola

const array = [3, 6, 4, 5, 8]

array.push(9)

console.log(array) //[3, 6, 4, 5, 8, 9]

Inmutabilidad

@HenarMendiola

const array = [3, 6, 4, 5, 8];

const newArray = array.concat(9);

console.log(array); //[3, 6, 4, 5, 8]

console.log(newArray); //[3, 6, 4, 5, 8, 9]

¿Porqué programar de manera funcional?

  • Descomposición de tareas complejas
  • Legibilidad
  • Código más fácilmente reusable
  • Testeabilidad

@HenarMendiola

Teoría de categorías

 

@HenarMendiola

Teoría de categorías

 

Wikipedia:

La teoría de categorías es un estudio matemático que trata de axiomatizar de forma abstracta diversas estructuras matemáticas como una sola, mediante el uso de objetos y morfismos. Al mismo tiempo trata de mostrar una nueva forma de ver las matemáticas sin incluir las nociones de elementos, pertenencia, entre otras.

@HenarMendiola

@HenarMendiola

Teoría de categorías

 

Wikipedia:

En teoría de categorías, una categoría (ADTs) es una estructura algebraica que consta de una colección de objetos, conectados unos con otros mediante flechas tales que se cumplen las siguientes propiedades básicas: las flechas se pueden componer unas con otras de manera asociativa, y para cada objeto existe una flecha que se comporta como un elemento neutro bajo la composición.

@HenarMendiola

Teoría de categorías

 

Wikipedia:

En teoría de categorías, un tipo de dato algebraico (ADT) es una estructura algebraica que consta de una colección de objetos, conectados unos con otros mediante flechas tales que se cumplen las siguientes propiedades básicas: las flechas se pueden componer unas con otras de manera asociativa, y para cada objeto existe una flecha que se comporta como un elemento neutro bajo la composición.

@HenarMendiola

1

2

3

4

5

Teoría de categorías

 

1. Colección de objetos:

@HenarMendiola

Teoría de categorías

 

1. Colección de objetos:

@HenarMendiola

Teoría de categorías

 

1. Colección de objetos:

@HenarMendiola

Teoría de categorías

 

1. Colección de objetos:

@HenarMendiola

Teoría de categorías

 

1. Colección de objetos:

@HenarMendiola

const blackSquare = GeometricObject('square', 'black')
const redSquare = GeometricObject('square', 'red')

Teoría de categorías

 

1. Colección de objetos:

@HenarMendiola

const blackSquare = new GeometricObject('circle', 'black')
const blackSquare = new GeometricObject('circle', 'red')

Teoría de categorías

 

2. Conectados mediante flechas:

@HenarMendiola

Teoría de categorías

 

2. Conectados mediante flechas:

@HenarMendiola

Teoría de categorías

 

2. Conectados mediante flechas:

@HenarMendiola

const blackSquare = changeShape(blackCircle, 'square');
const redSquare = changeColor(blackSquare, 'red');
const blackCircle= changeColor(redCircle, 'black');
const redCircle = changeShape(redSquare, 'circle');

Teoría de categorías

 

2. Conectados mediante flechas:

@HenarMendiola

const blackSquare = changeColor(redSquare, 'black');
const redSquare = changeShape(redCircle, 'square');
const blackCircle= changeShape(blackSquare, 'square');
const redCircle = changeColor(blackCircle, 'red');

Teoría de categorías

 

3. Las flechas se pueden componer:

@HenarMendiola

const changeColor = (color) => obj => changeColor(obj, color);
const changeShape = (shape) => obj => changeShape(obj, shape);

Teoría de categorías

 

3. Las flechas se pueden componer:

@HenarMendiola

const changeColorAndShape = (shape, color) => R.compose(changeShape(shape), changeColor(color));

Teoría de categorías

 

4. La composición es asociativa:

@HenarMendiola

Teoría de categorías

 

4. La composición es asociativa:

@HenarMendiola

changeColor(blackSquare, 'red')

Teoría de categorías

 

4. La composición es asociativa:

@HenarMendiola

changeColor(blackSquare, 'red')
changeShape(redSquare, 'circle')

Teoría de categorías

 

4. La composición es asociativa:

@HenarMendiola

changeColor(blackSquare, 'red')
changeShape(redSquare, 'circle')
changeColor(redCircle, 'black')

Teoría de categorías

 

4. La composición es asociativa:

@HenarMendiola

changeColor(redCircle, 'black')
changeColorAndShape(blackSquare, 'circle', 'red')

Teoría de categorías

 

4. La composición es asociativa:

@HenarMendiola

changeColorAndShape(redSquare, 'circle', 'black')
changeColor(blackSquare, 'red')

Teoría de categorías

 

4. La composición es asociativa:

@HenarMendiola

changeShape(blackSquare, 'circle')

Teoría de categorías

 

5. Por cada objeto existe una flecha identidad:

@HenarMendiola

const blackSquareTwo = id(blackSquare)
const redSquareTwo = id(redSquare)

Teoría de categorías

 

5. Por cada objeto existe una flecha identidad:

@HenarMendiola

Teoría de categorías

 

Wikipedia:

En teoría de categorías, un tipo de dato algebraico (ADT) es una estructura algebraica que consta de una colección de objetos, conectados unos con otros mediante flechas tales que se cumplen las siguientes propiedades básicas: las flechas se pueden componer unas con otras de manera asociativa, y para cada objeto existe una flecha que se comporta como un elemento neutro bajo la composición.

@HenarMendiola

1

2

3

4

5

Y a mí ¿qué me importa?

 

@HenarMendiola

Y a mí ¿qué me importa?

 

Composición

@HenarMendiola

Y a mí ¿qué me importa?

 

Reutilización

@HenarMendiola

Y a mí ¿qué me importa?

 

Entornos Seguros de trabajo

@HenarMendiola

Tipos de ADTs

 

@HenarMendiola

Un ejemplo: Funtores

@HenarMendiola

Funtores según teoría de categorías

 

@HenarMendiola

Funtores según teoría de categorías

 

@HenarMendiola

Funtores según Fantasy-Land

 

@HenarMendiola

Un ejemplo: Funtores

Identidad

Composición

Map

@HenarMendiola

Code expamples

@HenarMendiola

Un ejemplo: Funtores

@HenarMendiola

Funtor básico

  1. Implementación
  2. Testeo propiedades

Funtor Maybe

  1. Implementación
  2. Lógica interna y entornos seguros
  3. Testeo propiedades

Trabajo con funtores

  1. App basada en functores maybe

Conclusiones

  • Toda ADT presenta:
    • transformación identidad
    • composición de transformaciones
    • composición asociativa

@HenarMendiola

La teoría de categorías nos facilita la vida:

  • entornos seguros
  • reutilización
  • testeabilidad
  • composición

Conclusiones

@HenarMendiola

Preguntas

@HenarMendiola

nuevas dimensiones en el universo funcional

By Henar Hernandez

nuevas dimensiones en el universo funcional

  • 71