Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a...

Post on 31-Jul-2020

19 views 1 download

Transcript of Implementando un API RESTfiles.meetup.com/12646812/introduccion-a-clojure.pdf · Introducción a...

Introducción a ClojureImplementando un API REST

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

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

1. ¿Qué es Clojure?

Piet Mondrian

Composition II in Red, Blue, and Yellow

1930

1. ¿Qué es Clojure?

Rich Hickey

Clojure programming language

2007

1. ¿Qué es Clojure?

1. Lenguaje de programación

1. ¿Qué es Clojure?

1. Lenguaje de programación

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.

1. ¿Qué es Clojure?

1. Lenguaje de programación

Ejemplo función pura.

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

2. Conceptos básicos

1. Paradigma programación funcional

2. Concepto: Code as data

3. Programación concurrente

2. Conceptos básicos

Paradigma programación funcional1. Estructuras de datos inmutables.

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)

2. Conceptos básicos

Code as data

2. Conceptos básicos

Programación concurrente

2. Conceptos básicos

Programación concurrente

3. Refs (STM)

4. Futures

5. Promises

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.

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

3. ¿Por qué aprender Clojure?

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

Alan Perlis.

3. ¿Por qué aprender Clojure?

3. ¿Por qué aprender Clojure?

3. ¿Por qué aprender Clojure?

3. ¿Por qué aprender Clojure?

Piet Mondrian

Composition II in Red, Blue, and Yellow

1930

Minimalismo

3. ¿Por qué aprender Clojure?

Clojure es un lenguaje minimalista

Sintaxis: simple limitada consistente

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

4. ¿Qué necesito para programar?

4. ¿Qué necesito para programar?

Leiningen

Herramienta de automatización de proyectos escritos en Clojure.

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

5. Sintaxis del lenguaje

¿Este es el lenguaje con muchos paréntesis?

LISP: LISt Processing

5. Sintaxis del lenguaje

1. Expresiones S: “Code as data”

2. Prefix notation

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

-> 3 -> 15

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?

5. Sintaxis del lenguaje

4. Clases Estructuras de datos

mapas {:key value}

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

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

5. Sintaxis del lenguaje

4. Clases Estructuras de datos

a. deftype

b. defrecord

c. reify

5. Sintaxis del lenguaje

4. Estructuras de datos

clojure.core

● nil● Char● Numbers● String

5. Sintaxis del lenguaje

4. Estructuras de datos

clojure.core

● Set● List● Vector● Map

5. Sintaxis del lenguaje

5. Variables Valores inmutables

(def nombre-valor valor)

(def hello-world “Hello world”)

hello-world

-> Hello world

5. Sintaxis del lenguaje

5. Valores inmutables

(def basic-map {})

(def hello-world “Hello world”)

(assoc basic-map :message hello-world)

-> {:message “Hello world”}

5. Sintaxis del lenguaje

6. Métodos Funciones

a. Declarar una función:

(defn nombre-funcion “documentacion”

[lista-de-parametros] cuerpo-funcion)

5. Sintaxis del lenguaje

6. Funciones

b. Llamar una función:

(nombre-funcion lista-de-parametros)

5. Sintaxis del lenguaje

6. Funciones

5. Sintaxis del lenguaje

6. Funciones

Arity overloading

Parámetros opcionales

5. Sintaxis del lenguaje

Code as data (extra)

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

6. API REST en Clojure

1. REST

El ejemplo es REST nivel 2

6. API REST en Clojure

2. Aplicación

Directorio de servicios

6. API REST en Clojure

2. Aplicación

HTTP request

HTTP response

Front-end Back-end

6. API REST en Clojure

3. Estructura del código back-end

Servicios

Estructuras de datos

Persistencia

Infra

estru

ctur

a

6. API REST en Clojure

4. Pruebas e integración continua

Midje &Midje &

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

6. API REST en Clojure

5. Nombramiento de archivos

horario-api.clj-> horario_api.clj

Interoperabilidad con Java

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

7. Parte final

7. Parte final

Recursos

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

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

7. Parte final

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

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

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