Introducción a Clojure Implementando un API REST
Agenda 1. 2. 3. 4. 5. 6. 7. 8. Qué es Clojure? Conceptos básicos Por qué aprender Clojure? Qué necesito para programar? Sintaxis del lenguaje API REST en Clojure Parte final Fuentes
Agenda 1. 2. 3. 4. 5. 6. 7. 8. Qué es Clojure? Conceptos básicos Por qué aprender Clojure? Qué necesito para programar? Sintaxis del lenguaje API REST en Clojure Parte final 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 Ejemplo función impura. Permite side effects (acceso a la base de datos, consumo de servicios externos, etc.) Idealmente se debe programar sin side effects.
1. Qué es Clojure? 1. Lenguaje de programación Ejemplo función pura.
Agenda 1. 2. 3. 4. 5. 6. 7. 8. Qué es Clojure? Conceptos básicos Por qué aprender Clojure? Qué necesito para programar? Sintaxis del lenguaje API REST en Clojure Parte final 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 funcional 1. 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. 2. 3. 4. 5. 6. 7. 8. Qué es Clojure? Conceptos básicos Por qué aprender Clojure? Qué necesito para programar? Sintaxis del lenguaje API REST en Clojure Parte final 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. 2. 3. 4. 5. 6. 7. 8. Qué es Clojure? Conceptos básicos Por qué aprender Clojure? Qué necesito para programar? Sintaxis del lenguaje API REST en Clojure Parte final Fuentes
4. Qué necesito para programar?
4. Qué necesito para programar? Leiningen Herramienta de automatización de proyectos escritos en Clojure.
Agenda 1. 2. 3. 4. 5. 6. 7. 8. Qué es Clojure? Conceptos básicos Por qué aprender Clojure? Qué necesito para programar? Sintaxis del lenguaje API REST en Clojure Parte final 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) -> 3 (+ 1 2 3 4 5) -> 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. 2. 3. 4. 5. 6. 7. 8. Qué es Clojure? Conceptos básicos Por qué aprender Clojure? Qué necesito para programar? Sintaxis del lenguaje API REST en Clojure Parte final 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 Front-end Back-end HTTP request HTTP response
6. API REST en Clojure 3. Estructura del código back-end Infraestructura Servicios Estructuras de datos Persistencia
6. API REST en Clojure 4. Pruebas e integración continua Midje &
6. API REST en Clojure 5. Nombramiento de archivos Mejores prácticas de Clojure: a. minusculas b. 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. 2. 3. 4. 5. 6. 7. 8. Qué es Clojure? Conceptos básicos Por qué aprender Clojure? Qué necesito para programar? Sintaxis del lenguaje API REST en Clojure Parte final 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. 2. 3. 4. 5. 6. 7. 8. Qué es Clojure? Conceptos básicos Por qué aprender Clojure? Qué necesito para programar? Sintaxis del lenguaje API REST en Clojure Parte final Fuentes
8. Fuentes 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. http://clojure.org http://clojure-doc.org http://clojuredocs.org/ http://coding.smashingmagazine.com/2013/04/18/introduction-to-programming-type-systems http://blogs.perl.org/users/ovid/2010/08/what-to-know-before-debating-type-systems.html http://www.lispcast.com/static-vs-dynamic-typing http://gigasquidsoftware.com/blog/2014/02/01/hitchhikers-guide-to-clojure/ http://christophermaier.name/blog/2011/07/07/writing-elegant-clojure-code-using-higher-orderfunctions http://blakesmith.me/2012/05/25/understanding-clojure-concurrency-part-2.html http://www.cs.yale.edu/quotes.html http://en.wikipedia.org/wiki/piet_mondrian http://clojure.org/rationale
8. Fuentes 13. 14. 15. 16. 17. http://tech.puredanger.com/2010/02/09/clojure-4-private-functions/ http://clojure.org/functional_programming http://clojure.org/cheatsheet http://martinfowler.com/articles/richardsonmaturitymodel.html http://stackoverflow.com/questions/4420944/why-does-clojure-convert-dashes-in-names-tounderscores-in-the-filesystem