How to use Redis with MuleSoft. A quick start presentation.
Clojure: Java y Lisp, unidos
1. Clojure
Java y Lisp, unidos
Alejandro Serrano Mena
alejandro.serranom@estudiante.uam.es
Ciclo de Lenguajes Funcionales
Marzo-Mayo 2010, Escuela Polit´cnica Superior, UAM
e
2. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
Contenido
1 ¿Qu´ es Clojure?
e
2 El lenguaje
El REPL
Primeras “escapadas” a Java
3 Secuencias
Trabajo con funciones
Consultando un map
Evaluaci´n vaga
o
4 Macros
5 Memoria Software Transaccional (STM)
6 Integraci´n con Java
o
3. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
Un primer acercamiento
Un dialecto moderno de Lisp que
corre bajo la plataforma Java, con
un ojo puesto en la concurrencia
4. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
Algunas caracter´
ısticas de Lisp
Sintaxis casi inexistente, basada en par´ntesis
e
(defun ejemplo (t)
(cond
((> t 3) (print ‘‘Hola’’))
(t (print ‘‘Adios’’))))
Clojure la limpia bastante
Evitando en muchos casos los par´ntesis
e
Introduciendo otros s´
ımbolos visualmente distintos
(defn ejemplo [t]
(cond
(> t 3) (print ‘‘Hola’’)
:else (print ‘‘Adios’’)))
5. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
Algunas caracter´
ısticas de Lisp
La lista es la unidad b´sica de funcionamiento
a
De hecho, la celda cons
En Clojure se cambia por la secuencia, que es una interfaz
gen´rica para listas, conjuntos, vectores. . .
e
6. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
Algunas caracter´
ısticas de Lisp
Es homoic´nico
o
Datos y programas se describen del mismo modo
Permite escribir macros, es decir, extender el lenguaje
de forma sencilla
7. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
Clojure y Java
Clojure corre en la misma m´quina virtual que Java
a
Podemos usar todas las clases que nos ofrece la librer´ est´ndar
ıa a
de Java, y todas aquellas a las que estemos acostumbrado de
nuestro trabajo con ese lenguaje
La mayor parte de las herramientas (JUnit, Ant. . . ) tambi´n
e
sirven para Clojure
Tambi´n podemos crear nuevos elementos que se puedan usar
e
dentro de c´digo Java
o
En general, los proyectos tendr´n una parte en Java y otra en
a
Clojure, us´ndose cada lenguaje all´ donde sea m´s util
a ı a ´
8. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
Programaci´n funcional
o
Clojure est´ pensado para ser usado funcionalmente (aunque
a
tambi´n puede usarse de forma estructurada ´ OO)
e o
Permite pasar funciones como argumentos y tenerlas como valor
de retorno
Usa estructuras de datos inmutables
En vez de usar funciones que cambien el estado de un objeto,
tendremos funciones que crean nuevos datos a partir de otros
Permiten una mejor aproximaci´n a la concurrencia, como ve-
o
remos en la parte de STM
9. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
Contenido
1 ¿Qu´ es Clojure?
e
2 El lenguaje
El REPL
Primeras “escapadas” a Java
3 Secuencias
Trabajo con funciones
Consultando un map
Evaluaci´n vaga
o
4 Macros
5 Memoria Software Transaccional (STM)
6 Integraci´n con Java
o
10. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
Primeras “escapadas” a Java
Traducci´n Java-Clojure
o
Java Clojure
import ns.Clase1 (import ’(ns Clase Clase2))
import ns.Clase2
new Clase(arg1, arg2...) (Clase. arg1 arg2 ...)
(new Clase arg1 arg2 ...)
obj.metodo(arg1, arg2, ...) (metodo. obj arg1 arg2 ...)
(. obj metodo arg1 arg2 ...)
Clase.estatico(arg1, arg2, ...) (Clase/estatico arg1 arg2 ...)
obj.metodo1().metodo2().metodo3() (.. obj metodo1 metodo2 metodo3)
11. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
Contenido
1 ¿Qu´ es Clojure?
e
2 El lenguaje
El REPL
Primeras “escapadas” a Java
3 Secuencias
Trabajo con funciones
Consultando un map
Evaluaci´n vaga
o
4 Macros
5 Memoria Software Transaccional (STM)
6 Integraci´n con Java
o
12. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
Trabajo con funciones
Tipos de secuencias
Sintaxis Constructores
Lista ( e1 e2 e3 ) (list e1 e2 e3)
Vector [ e1 e2 e3 ] (vector e1 e2 e3)
(vec lista-elementos)
Conjunto #{ e1 e2 e3 } (hash-set e1 e2 e3)
(set lista-elementos)
Diccionario { c1 v1, c2 v2 } (hash-map c1 v1 c2 v2)
13. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
Consultando un map
´
Algebra relacional y Clojure
Operaci´n
o SQL Clojure
Uni´n, ∪
o - (union conj1 conj2 )
Diferencia, - (difference conj1 conj2 )
Producto, × - (for [x conj1 y conj2 ] ...)
Renombrado, ρ AS (rename conj {:antigua :nueva })
Proyecci´n, π
o SELECT (project conj [:clave1 :clave2 ...])
Selecci´n, σ
o WHERE (select predicado conj)
Reuni´n natural, ⊲⊳
o JOIN (join conj1 conj2 )
14. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
Contenido
1 ¿Qu´ es Clojure?
e
2 El lenguaje
El REPL
Primeras “escapadas” a Java
3 Secuencias
Trabajo con funciones
Consultando un map
Evaluaci´n vaga
o
4 Macros
5 Memoria Software Transaccional (STM)
6 Integraci´n con Java
o
15. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
Contenido
1 ¿Qu´ es Clojure?
e
2 El lenguaje
El REPL
Primeras “escapadas” a Java
3 Secuencias
Trabajo con funciones
Consultando un map
Evaluaci´n vaga
o
4 Macros
5 Memoria Software Transaccional (STM)
6 Integraci´n con Java
o
16. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
Contenido
1 ¿Qu´ es Clojure?
e
2 El lenguaje
El REPL
Primeras “escapadas” a Java
3 Secuencias
Trabajo con funciones
Consultando un map
Evaluaci´n vaga
o
4 Macros
5 Memoria Software Transaccional (STM)
6 Integraci´n con Java
o
17. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
¿Qu´ nos hemos dejado?
e
Multim´todos
e
Expresiones regulares (#‘‘w+’’, re-seq)
Tests unitarios (deftest)
Optimizaciones a la recursi´n (trampoline)
o
Mucho m´s sobre listas vagas (lazy-seq)
a
Algo m´s sobre macros (~@, manipulaci´n del c´digo)
a o o
Trabajo con XML (clojure.xml.parse)
Librer´ librer´ y m´s librer´
ıas, ıas a ıas
18. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
Referencias
Sitios web
Web oficial: http://clojure.org
Blog de Cosmin Stejerean: http://onclojure.com
Plug-ins para IDEs
Counterclockwise (Eclipse):
http://code.google.com/p/counterclockwise
Enclojure (NetBeans): http://www.enclojure.org
Emacs: http://github.com/jochu/clojure-mode
VimClojure:
http://kotka.de/projects/clojure/vimclojure.html
Libros
Programming Clojure por Stuart Halloway, The Pragmatic Bookshelf
19. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
¿Preguntas?
20. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
¡Muchas gracias!
21. ¿Qu´ es Clojure?
e El lenguaje Secuencias Macros Memoria Software Transaccional (STM) Integraci´n con Java
o
Esta presentaci´n fue tipografiada usando el paquete Beamer de
o
LTEXy el programa Texmaker
A
Esta obra se encuentra bajo los t´rminos de la licencia Creative
e
Commons 3.0 Reconocimiento - No Comercial - Compartir Igual
http://creativecommons.org/licenses/by-nc-sa/3.0/es/