implementando un api restfiles.meetup.com/12646812/introduccion-a-clojure.pdf · introducción a...

57
Introducción a Clojure Implementando un API REST

Upload: others

Post on 31-Jul-2020

18 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

Introducción a ClojureImplementando un API REST

Page 2: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

Agenda

1. ¿Qué es Clojure?2. Conceptos básicos3. ¿Por qué aprender Clojure?4. ¿Qué necesito para programar?5. Sintaxis del lenguaje6. API REST en Clojure7. Parte final8. Fuentes

Page 3: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

Agenda

1. ¿Qué es Clojure?2. Conceptos básicos3. ¿Por qué aprender Clojure?4. ¿Qué necesito para programar?5. Sintaxis del lenguaje6. API REST en Clojure7. Parte final8. Fuentes

Page 4: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

1. ¿Qué es Clojure?

Piet Mondrian

Composition II in Red, Blue, and Yellow

1930

Page 5: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

1. ¿Qué es Clojure?

Rich Hickey

Clojure programming language

2007

Page 6: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

1. ¿Qué es Clojure?

1. Lenguaje de programación

Page 7: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

1. ¿Qué es Clojure?

1. Lenguaje de programación

Page 8: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

1. ¿Qué es Clojure?

1. Lenguaje de programación

Permite side effects (acceso a la base de datos, consumo de servicios externos, etc.)Idealmente se debe programar sin side effects.

Ejemplo función impura.

Page 9: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

1. ¿Qué es Clojure?

1. Lenguaje de programación

Ejemplo función pura.

Page 10: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

Agenda

1. ¿Qué es Clojure?2. Conceptos básicos3. ¿Por qué aprender Clojure?4. ¿Qué necesito para programar?5. Sintaxis del lenguaje6. API REST en Clojure7. Parte final8. Fuentes

Page 11: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

2. Conceptos básicos

1. Paradigma programación funcional

2. Concepto: Code as data

3. Programación concurrente

Page 12: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

2. Conceptos básicos

Paradigma programación funcional1. Estructuras de datos inmutables.

Page 13: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

2. Conceptos básicos

Paradigma programación funcional

2. Funciones como “First-class citizens”.

(map inc [1 2 3 4 5])

-> (2 3 4 5 6)

Page 14: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

2. Conceptos básicos

Code as data

Page 15: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

2. Conceptos básicos

Programación concurrente

Page 16: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

2. Conceptos básicos

Programación concurrente

3. Refs (STM)

4. Futures

5. Promises

Page 17: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

2. Conceptos básicos (Resumen)

● Estructuras de datos inmutables. (Se pueden compartir entre threads).

● Funciones como elementos de primer orden.

● “Construcciones” propias del lenguaje para el manejo de concurrencia.

Page 18: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

Agenda

1. ¿Qué es Clojure?2. Conceptos básicos3. ¿Por qué aprender Clojure?4. ¿Qué necesito para programar?5. Sintaxis del lenguaje6. API REST en Clojure7. Parte final8. Fuentes

Page 19: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

3. ¿Por qué aprender Clojure?

“A language that doesn't affect the way you think about programming, is not worth knowing.”

Alan Perlis.

Page 20: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

3. ¿Por qué aprender Clojure?

Page 21: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

3. ¿Por qué aprender Clojure?

Page 22: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

3. ¿Por qué aprender Clojure?

Page 23: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

3. ¿Por qué aprender Clojure?

Piet Mondrian

Composition II in Red, Blue, and Yellow

1930

Minimalismo

Page 24: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

3. ¿Por qué aprender Clojure?

Clojure es un lenguaje minimalista

Sintaxis: simple limitada consistente

Page 25: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

Agenda

1. ¿Qué es Clojure?2. Conceptos básicos3. ¿Por qué aprender Clojure?4. ¿Qué necesito para programar?5. Sintaxis del lenguaje6. API REST en Clojure7. Parte final8. Fuentes

Page 26: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

4. ¿Qué necesito para programar?

Page 27: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

4. ¿Qué necesito para programar?

Leiningen

Herramienta de automatización de proyectos escritos en Clojure.

Page 28: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

Agenda

1. ¿Qué es Clojure?2. Conceptos básicos3. ¿Por qué aprender Clojure?4. ¿Qué necesito para programar?5. Sintaxis del lenguaje6. API REST en Clojure7. Parte final8. Fuentes

Page 29: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

5. Sintaxis del lenguaje

¿Este es el lenguaje con muchos paréntesis?

LISP: LISt Processing

Page 30: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

5. Sintaxis del lenguaje

1. Expresiones S: “Code as data”

2. Prefix notation

(+ 1 2) (+ 1 2 3 4 5)

-> 3 -> 15

Page 31: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

5. Sintaxis del lenguaje

3. Packages Namespaces

(ns bog.jvm.meetup)

¿Cómo declaro una clase?

¿Cómo declaro una variable?

¿Cómo declaro un método?

Page 32: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

5. Sintaxis del lenguaje

4. Clases Estructuras de datos

mapas {:key value}

(assoc {} :key1 “value1” :key2 “value2”)

-> {:key1 “value1” :key2 “value2”}

Page 33: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

5. Sintaxis del lenguaje

4. Clases Estructuras de datos

a. deftype

b. defrecord

c. reify

Page 34: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

5. Sintaxis del lenguaje

4. Estructuras de datos

clojure.core

● nil● Char● Numbers● String

Page 35: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

5. Sintaxis del lenguaje

4. Estructuras de datos

clojure.core

● Set● List● Vector● Map

Page 36: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

5. Sintaxis del lenguaje

5. Variables Valores inmutables

(def nombre-valor valor)

(def hello-world “Hello world”)

hello-world

-> Hello world

Page 37: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

5. Sintaxis del lenguaje

5. Valores inmutables

(def basic-map {})

(def hello-world “Hello world”)

(assoc basic-map :message hello-world)

-> {:message “Hello world”}

Page 38: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

5. Sintaxis del lenguaje

6. Métodos Funciones

a. Declarar una función:

(defn nombre-funcion “documentacion”

[lista-de-parametros] cuerpo-funcion)

Page 39: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

5. Sintaxis del lenguaje

6. Funciones

b. Llamar una función:

(nombre-funcion lista-de-parametros)

Page 40: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

5. Sintaxis del lenguaje

6. Funciones

Page 41: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

5. Sintaxis del lenguaje

6. Funciones

Arity overloading

Parámetros opcionales

Page 42: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

5. Sintaxis del lenguaje

Code as data (extra)

Page 43: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

Agenda

1. ¿Qué es Clojure?2. Conceptos básicos3. ¿Por qué aprender Clojure?4. ¿Qué necesito para programar?5. Sintaxis del lenguaje6. API REST en Clojure7. Parte final8. Fuentes

Page 44: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

6. API REST en Clojure

1. REST

El ejemplo es REST nivel 2

Page 45: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

6. API REST en Clojure

2. Aplicación

Directorio de servicios

Page 46: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

6. API REST en Clojure

2. Aplicación

HTTP request

HTTP response

Front-end Back-end

Page 47: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

6. API REST en Clojure

3. Estructura del código back-end

Servicios

Estructuras de datos

Persistencia

Infra

estru

ctur

a

Page 48: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

6. API REST en Clojure

4. Pruebas e integración continua

Midje &Midje &

Page 49: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

6. API REST en Clojure

5. Nombramiento de archivos

Mejores prácticas de Clojure:a. minusculasb. palabras separadas por -

ej: horario-api.clj, citas-api.clj

Page 50: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

6. API REST en Clojure

5. Nombramiento de archivos

horario-api.clj-> horario_api.clj

Interoperabilidad con Java

Page 51: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

Agenda

1. ¿Qué es Clojure?2. Conceptos básicos3. ¿Por qué aprender Clojure?4. ¿Qué necesito para programar?5. Sintaxis del lenguaje6. API REST en Clojure7. Parte final8. Fuentes

Page 52: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

7. Parte final

Page 53: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

7. Parte final

Recursos

1. Code:https://github.com/julianespinel/directory

2. Slides: https://speakerdeck.com/julianespinel

Page 54: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

7. Parte final

Page 55: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

Agenda

1. ¿Qué es Clojure?2. Conceptos básicos3. ¿Por qué aprender Clojure?4. ¿Qué necesito para programar?5. Sintaxis del lenguaje6. API REST en Clojure7. Parte final8. Fuentes

Page 56: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

8. Fuentes1. http://clojure.org2. http://clojure-doc.org3. http://clojuredocs.org/4. http://coding.smashingmagazine.com/2013/04/18/introduction-to-programming-type-systems5. http://blogs.perl.org/users/ovid/2010/08/what-to-know-before-debating-type-systems.html6. http://www.lispcast.com/static-vs-dynamic-typing7. http://gigasquidsoftware.com/blog/2014/02/01/hitchhikers-guide-to-clojure/8. http://christophermaier.name/blog/2011/07/07/writing-elegant-clojure-code-using-higher-order-

functions9. http://blakesmith.me/2012/05/25/understanding-clojure-concurrency-part-2.html

10. http://www.cs.yale.edu/quotes.html11. http://en.wikipedia.org/wiki/Piet_Mondrian12. http://clojure.org/rationale

Page 57: Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a Clojure Implementando un API REST. Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos

8. Fuentes13. http://tech.puredanger.com/2010/02/09/clojure-4-private-functions/14. http://clojure.org/functional_programming15. http://clojure.org/cheatsheet16. http://martinfowler.com/articles/richardsonMaturityModel.html17. http://stackoverflow.com/questions/4420944/why-does-clojure-convert-dashes-in-names-to-

underscores-in-the-filesystem