Slide 1

Slide 1 text

Clojure for JS developer Clojurescripting @jessecogollo Software developer at Advice Interactive group co-organizer of @medellinjs/@mongodbmedellin/@jsconfco and @avanet member.

Slide 2

Slide 2 text

qué significa eso? ● Clojure para Jesse Developer ● Clojure para JS developers ● Clojurescripting basado en javascripting

Slide 3

Slide 3 text

Motivación

Slide 4

Slide 4 text

Qué conoceremos hoy ● Que es clojure (prefix notation) ● leiningen ○ Entendiendo la estructura del proyecto ○ REPL ● Emacs ○ CIDER ○ Paredit ● Visual Studio Code ○ code extension (clojure 0.9.3)

Slide 5

Slide 5 text

Qué conoceremos hoy ● Clojure ○ Syntax () ○ Data Structures (inmutable) ■ Strings ■ Numbers ■ Naming values (def) ■ vectors (array) ■ maps (object) ■ defining functions

Slide 6

Slide 6 text

Syntax

Slide 7

Slide 7 text

Clojurescripting Ahora sí, lo interesante…. Codigo !!!! 1) instalar Emacs ó VSCode 2) lein new clojurescripting && cd clojurescripting 3) en el directorio src/clojurescripting crear los siguientes archivos ○ introduction.clj ○ variables.clj ○ strings.clj ○ string-length.clj ○ edit-string.clj (imposible) ○ numbers.clj ○ rounding-number.clj ○ number-to-string.clj (imposible) ○ if.clj

Slide 8

Slide 8 text

Cloujurescripting 3) en el directorio src/clojurescripting crear los siguientes archivos (continuación) ○ for.clj ○ array.clj ○ filter.clj ○ accessing-array-values.clj ○ looping-through-array.clj ○ objects.clj ○ object-properties.clj ○ functions.clj ○ function-arguments.clj

Slide 9

Slide 9 text

introduction.clj JS: console.log(‘Hello world !!!’); -------------------------------------------------------- Clojure: (println "Hello world !!!") En este ejercicio vamos a imprimir en la consola la frase `Hello world`.

Slide 10

Slide 10 text

variables.clj JS: const example = ‘Hello from variable’; console.log(example); -------------------------------------------------------- Clojure: (def example "Hello from variable") (println example) En este ejercicio vamos a definir una variable, le asignamos un valor y lo imprimimos. O como se diria en clojurian: asignar un nombre a una estructura de datos.

Slide 11

Slide 11 text

strings.clj JS: const example = ‘Hello world’; console.log(example); -------------------------------------------------------- Clojure: (def example (str "Hello " "world")) (println example) En este ejercicio vamos a definir un string, lo vamos a guardar en una variable y lo imprimimos.

Slide 12

Slide 12 text

string-length.clj JS: const example = ‘Hello from variable’; const length = example.length; console.log(length); -------------------------------------------------------- Clojure: (def example "Hello from variable") (println (count example)) En este ejercicio vamos a definir un string, lo vamos a guardar en una variable y lo imprimimos.

Slide 13

Slide 13 text

edit-string.clj JS: const example = ‘Hello variable’; example = example.replace(‘Hello’, ‘Bye’); console.log(example); -------------------------------------------------------- Clojure: (require '[clojure.string :as str]) (def example "Hello variable") (def new-example (str/replace example #"Hello" "Bye")) (println new-example) En este ejercicio vamos a definir un string, lo editamos y lo imprimimos.

Slide 14

Slide 14 text

number.clj JS: const number = 123; console.log(number); -------------------------------------------------------- Clojure: (def variable-integer 123) (def variable-float 1.2) (def variable-ratio 1/5) (println variable-integer) (println variable-float) (println variable-ratio) En este ejercicio vamos a definir un número, lo vamos a guardar en una variable y lo imprimimos.

Slide 15

Slide 15 text

rounding-number.clj JS: const number = 1.6; const rounded = Math.round(number); console.log(rounded); -------------------------------------------------------- Clojure: (def number 1.6) (def rounded (Math/round number)) (println rounded) En este ejercicio vamos a definir un float, y vamos a implementar un round y lo guardamos el resultado en una nueva variable.

Slide 16

Slide 16 text

number-to-string.clj JS: const number = 256; number = number.toString(); console.log(number); -------------------------------------------------------- Clojure: (def number 256) (def number-to-string (str number)) (println number-to-string) En este ejercicio vamos a definir un número, y vamos a generar un string del número.

Slide 17

Slide 17 text

if.clj JS: const year = 2018; if (year === 2018) { console.log(‘Happy new year !!!’); } else { console.log(‘Are you kidding me?’); } -------------------------------------------------------- Clojure: (def year 2018) (if (= year 2018) (println "Happy new year !!!") (println "Are you kidding me?")) En este ejercicio vamos a implementar un if sencillo.

Slide 18

Slide 18 text

for.clj JS: for(x = 0; i < 10; i++) { console.log(‘x’, x); } -------------------------------------------------------- Clojure: (for [x[1 2 3 4 5 6 7 8 9 10]] (println ‘x ’ x)) En este ejercicio vamos a hacer un for simple.

Slide 19

Slide 19 text

array.clj JS: const array = [‘vector’,’is the new’,’array’]; console.log(array); -------------------------------------------------------- Clojure: (def array ["vector" "is the new" "array"]) (println array) En clojure vectors, en este ejercicio vamos a definir un vector con tres valores y lo imprimimos en pantalla.

Slide 20

Slide 20 text

filter.clj JS: const animals = [“dog” “bird”, “cat”]; const noFly = example.filter((animal) => animal != “bird”); console.log(noFly); -------------------------------------------------------- (def animals ["dog" "bird" "cat"]) (defn filterAnimal [animal] (not= animal "bird")) (def no-fly (filter filterAnimal animals)) (println no-fly) En este ejercicio vamos a definir un vector con tres animales, le implementamos la función filter para filtrar la lista e imprimir el resultado.

Slide 21

Slide 21 text

accessing-array-values.clj JS: const animals = [‘dog’, ‘cat’, ‘bird’, ‘rat’]; const animal = animals[0]; console.log(animal); -------------------------------------------------------- Clojure: (def animals ["cat" "dog" "bird" "rat"]) (def animal (get animals 0)) (println animal) En este ejercicio vamos a definir un array, y vamos a acceder al primer elemento.

Slide 22

Slide 22 text

looping-through-array.clj JS: const animals = [‘cat’,’dog’,’rat’]; var animalss = animals.map((animal) => `${animal}s`); console.log(animalss); -------------------------------------------------------- Clojure: (def animals ["cat" "dog" "rat"]) (def animalss (map (fn [animal] (str animal "s")) animals)) (println animalss) En este ejercicio vamos a definir un string, lo vamos a guardar en una variable y lo imprimimos.

Slide 23

Slide 23 text

objects.clj JS: const dog = { animal: true, bark: “Woof… Woof !!!”, legs: 4 }; console.log(dog); -------------------------------------------------------- Clojure: (def dog { :animal true :bark "Woof... Woof !!!" :legs 4 }) (println dog) En este ejercicio vamos a definir un objeto ó en Clojurian maps, y lo imprimimos.

Slide 24

Slide 24 text

object-properties.clj JS: const dog = { animal: true, bark: “Woof--- Woof !!!”, legs: 4}; const dogBark1 = dog.bark; const dogBark2 = dog[bark]; console.log(dogBark1); console.log(dogBark2); -------------------------------------------------------- Clojure: (def dog { :animal true :bark "Woof... Woof !!!" :legs 4 }) (def dog-bark (get dog :bark)) (println dog-bark) En este ejercicio vamos a definir un string, lo vamos a guardar en una variable y lo imprimimos.

Slide 25

Slide 25 text

functions.clj JS: function fnHello() { return “Hello world from function”; }; console.log(fnHello()); -------------------------------------------------------- Clojure: (defn fnHello [] "Hello world from function") (println (fnHello)) En este ejercicio vamos a definir una función, que retorna un string y lo imprimimos.

Slide 26

Slide 26 text

function-arguments.clj JS: function fnHello(name) { return `Hello ${name} from function`; }; console.log(fnHello(“jesse”)); -------------------------------------------------------- Clojure: (defn fnHello [name] (str "Hello " name " from function")) (println (fnHello "Jesse")) En este ejercicio vamos a definir una función que recibe un parámetro, y retorna un string con un saludo.

Slide 27

Slide 27 text

Referencias ● https://www.braveclojure.com ● https://clojurescript.org/ -> https://clojure.org/guides/learn/syntax ● https://clojuredocs.org/ -> lo mejor para encontrar ejemplos. ● https://leiningen.org/ ● https://www.meetup.com/Coljure/

Slide 28

Slide 28 text

¿Preguntas?

Slide 29

Slide 29 text

Gracias !!!