Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Introduction to Clojure
Search
Julian Espinel
March 01, 2014
Programming
68
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Introduction to Clojure
Spanish version
Julian Espinel
March 01, 2014
More Decks by Julian Espinel
See All by Julian Espinel
Deploy and monitor an application with Docker
julianespinel
0
81
Building a microservice
julianespinel
0
72
Microservices
julianespinel
1
68
Autheo
julianespinel
1
180
Other Decks in Programming
See All in Programming
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
190
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
160
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
280
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
230
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
200
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
410
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
610
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
180
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.3k
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
130
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
590
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
300
Featured
See All Featured
Context Engineering - Making Every Token Count
addyosmani
9
980
RailsConf 2023
tenderlove
30
1.5k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Fireside Chat
paigeccino
42
4k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
330
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
400
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
310
Leo the Paperboy
mayatellez
7
1.9k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
480
Transcript
Introducción a Clojure Implementando un API REST
Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos 3. ¿Por
qué aprender Clojure? 4. ¿Qué necesito para programar? 5. Sintaxis del lenguaje 6. API REST en Clojure 7. Parte final 8. Fuentes
Agenda 1. ¿Qué es Clojure? 2. Conceptos básicos 3. ¿Por
qué aprender Clojure? 4. ¿Qué necesito para programar? 5. Sintaxis del lenguaje 6. API REST en Clojure 7. Parte final 8. 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ásicos 3. ¿Por
qué aprender Clojure? 4. ¿Qué necesito para programar? 5. Sintaxis del lenguaje 6. API REST en Clojure 7. Parte final 8. 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. ¿Qué es Clojure? 2. Conceptos básicos 3. ¿Por
qué aprender Clojure? 4. ¿Qué necesito para programar? 5. Sintaxis del lenguaje 6. API REST en Clojure 7. Parte final 8. 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ásicos 3. ¿Por
qué aprender Clojure? 4. ¿Qué necesito para programar? 5. Sintaxis del lenguaje 6. API REST en Clojure 7. Parte final 8. 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ásicos 3. ¿Por
qué aprender Clojure? 4. ¿Qué necesito para programar? 5. Sintaxis del lenguaje 6. API REST en Clojure 7. Parte final 8. 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ásicos 3. ¿Por
qué aprender Clojure? 4. ¿Qué necesito para programar? 5. Sintaxis del lenguaje 6. API REST en Clojure 7. Parte final 8. 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 Infraestructura
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. 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. ¿Qué es Clojure? 2. Conceptos básicos 3. ¿Por
qué aprender Clojure? 4. ¿Qué necesito para programar? 5. Sintaxis del lenguaje 6. API REST en Clojure 7. Parte final 8. 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ásicos 3. ¿Por
qué aprender Clojure? 4. ¿Qué necesito para programar? 5. Sintaxis del lenguaje 6. API REST en Clojure 7. Parte final 8. Fuentes
8. Fuentes 1. http://clojure.org 2. http://clojure-doc.org 3. http://clojuredocs.org/ 4. http://coding.smashingmagazine.com/2013/04/18/introduction-to-programming-type-systems
5. http://blogs.perl.org/users/ovid/2010/08/what-to-know-before-debating-type-systems.html 6. http://www.lispcast.com/static-vs-dynamic-typing 7. 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- functions 9. http://blakesmith.me/2012/05/25/understanding-clojure-concurrency-part-2.html 10. http://www.cs.yale.edu/quotes.html 11. http://en.wikipedia.org/wiki/Piet_Mondrian 12. http://clojure.org/rationale
8. Fuentes 13. http://tech.puredanger.com/2010/02/09/clojure-4-private-functions/ 14. http://clojure.org/functional_programming 15. http://clojure.org/cheatsheet 16. http://martinfowler.com/articles/richardsonMaturityModel.html
17. http://stackoverflow.com/questions/4420944/why-does-clojure-convert-dashes-in-names-to- underscores-in-the-filesystem