Clojure 101 for Javascripters

Matias Hernández

Facebook Developers Circles: Santiago

1 👋 Hola!

modus.png

Es una consultora global, parte del Inc 5000

We are hiring! https://moduscreate.com/careers

2 👋 Hola!

egghead.png

Video tutorials for badass developers https://egghead.io

3 👋 Hola!

auth0.png

An Authentication and authorization service for your app.

4 👋 Hola!

5 Clojure

clojure.png

6 ¿Por que?

but-why-meme-generator-but-why-84103d.jpg

7 $$$

money.png

8 $$$

usedby.png

9 ¿Qué es?

(defn game-panel [frame game]
  (proxy [JPanel ActionListener KeyListener] []
    (paintComponent [g]
      (proxy-super paintComponent g)
      (paint g (@game :snake))
      (paint g (@game :apple)))
    ; START: swap!
    (actionPerformed [e]
      (swap! game update-positions)
      (when (lose? (@game :snake))
    (swap! game reset-game)
    (JOptionPane/showMessageDialog frame "You lose!"))
    ; END: swap!
      (when (win? (@game :snake))
    (swap! game reset-game)
    (JOptionPane/showMessageDialog frame "You win!"))
      (.repaint this))
    (keyPressed [e]
      (swap! game update-direction (dirs (.getKeyCode e))))
    (getPreferredSize []
      (Dimension. (* (inc width) point-size)
          (* (inc height) point-size)))
    (keyReleased [e])
    (keyTyped [e])))

10 ¿Qué es?

  • Rich Hickey lo crea el 2007.
  • Es un dialecto de Lisp!
  • Es Funcional!
  • Dinámico
  • Data oriented!
  • REPL
  • Hosted

11 Dialecto de LISP

  • Lisp nació en 1958 y se reusa a morir
  • Inventó las estructuras condicionales
  • Nacieron muchas ideas de CS
  • Clojure mantiene su sintaxis y simplesa
  • homoiconocidad

“Lisp isn’t a language, it’s a building material.” — Alan Kay

12 Programación Funcional

Ahora todos son funcionales

Incluso Java incluye funciones anónimas!!

13 Programación Funcional

  • Estructuras de datos inmutables
  • Concurrencia!
  • Estructuras de datos Persistentes: List, Vector, Map & Set
  • Shared-Memory (en realidad no se duplica, se almacena un diff)

14 Programación Funcional

  • No es purista como Haskell
  • es de tipado dinámico
  • Clojure es “interactivo”

“Choose immutability and see where it takes you” — Rich Hickey, Clojure creator

15 Programación Funcional

  • Busca simplicidad (no ser más fácil)
  • Minimiza los “side effects”
  • Funciones Puras

        (defn increment [numbers] (map inc numbers))
        (increment '(1 2 3 4 5))
    
    
        ; impure
        (def global-value '(5 4 3 2 1))
        (defn impure-increment [numbers]
          (map inc global-value))
        (impure-increment '(1 2 3 4 5))
    
    

16 Hosted

Si he llegado hasta aquí es por que me aupé en hombros de gigantes - Atribuido a Sr. Isaac Newton

java.png

javascript.png

net.png

17 Transición

  • Pocos o casi nadie usa el debugger con Node. No lo extrañaras 🤷‍♂️
  • Javascript es de tipado dinámico, nada nuevo 💪.
  • En la actualidad la mayoria trabaja con un enfoque pseudo-funcional con Javacript. 🎉
  • Ya usas un transpilador y un bundler para Javascript. ✅

18 Sintaxis

Casi no hay sintaxis que aprender 🎉

JavascriptClojure
1 + 2 + 3;
(+ 1 2 3)

Y ese es el 90% de la sintaxis `(operator op1 op2 op3)`

19 Bindings

Declaración de variables

JavascriptClojure
var a = 5
var b = 10;
if(a === 5){
    let a = 4;
    var b = 1
    console.log(a); // 4
    console.log(b); // 1
}
console.log(a); // 5
console.log(b); //1
(def a 5)
(def b 10)
(if (== a 5)
  (do
    (let [a 4] (println a)); 4
    (def b 1); override
    (println b))) ;1
(println a); 5
(println b); 1

20 Condicional

JavascriptClojure
console.log(true ? "Its true" : "Error")

if(true) {
    something();
    otherTask();
}
(println (if true "Its true" "Error"))

(if true
  (do
    (something)
    (otherTask)
    )
)

21 Funciones

funciones.png

22 Sintaxis

(println (take 10 (map (fn [x] (* x x)) (range))))

23 Data

JavascriptClojure
class Person {
    init(name, age) {...}
    getName() => {...}
    getAge() => {...}
}
const v = new Person("Matias", 34)
v.getName()
v.getAge()

(def person {:name "Matias" :age 34})
(get person :name)
(:age person)

24 Consiso

ejemplo.png

25 Video

26 Me pueden encontrar

27 Preguntas

questions.jpg

Created by matiasfha.