(apprendre 'Clojure :avec #_une 'web-app)
					

Jonathan WINANDY @ahoy_jon
Philippe HONG @h_w_ki

Avant de commencer :

Le WIFI :

SSID : devoxxfr-hol

PASS : hola#4321

A propos de nous

Jonathan Winandy, Directeur d'Univalence
Philippe Hong, Data Engineer chez Univalence

Le plan !

  • Courte introduction sur Clojure
    • La genèse
    • EDN
    • Idées intéressantes
  • Exercices sur votre machine

    SSID : devoxxfr-hol

    PASS : hola#4321

La genèse

Clojure a été créé en 2007 par Rich Hickey pour simplifier la programmation sur la JVM en se basant sur les concepts de la programmation fonctionnelle et les idiomes de LISP.

EDN

Extensible data notation : EDN est pour Clojure ce que JSON est pour Javascript.

C'est un format de donnée :

  • sympatique pour les humains
  • et relativement extensible.

JSON EDN
3.14159nombres3.14159
"hello world" chaîne de caractères "hello world"
[1, 2, 3, 4] tableaux [1 2 3 4]
{"name": "alice"} tableaux associatif{"name" "alice"}
true booléens true
null null nil

Les collections

vector[2 3 1]ordonné, accès direct (random access)
list(2 3 1)ordonné
set#{2 3 1}non-ordonné, valeurs uniques

Les identifiants

string"name"texte
keyword:nameréférence lui-même
symbolenameréférence quelque chose d'autre

Un exemple


                       {:nom "Alice"
                        :sexe :feminin
                        :job cryptologue}
					

Namespace


						mammifère.canin/chien
						:status/pret
					

Tags


						#inst "1985-04-12T23:20:50.52Z"
						#uuid "f81d4fae-7dec-11d0-a765-00a0c91e6bf6"
					

Tags


						#color/rgb "e8a433"
						#color/rgb [232 164 51]
					

Evaluation

La majorité des données s'évaluent vers elles-même


					 (eval "foo"  ) <=> "foo"
					 (eval   123  ) <=>   123
					 (eval [1 2 3]) <=> [1 2 3]
					 (eval {:x 1} ) <=> {:x 1}
					

Evaluation

Les symboles s'évaluent vers une valeur du contexte


						(eval 'pi)      <=>  3.14159
						(eval 'message) <=> "Hello World"
					

Evaluation

Les listes évaluent en appel de fonction


						(+ 1 1)            <=> 2
						(and true false)   <=> false
						(f arg1 arg2 arg3) <=> ...
					

Evaluation

Les fonctions évaluent d'abord leurs arguments


						(+ (* 3 3) (* 4 4))
						=> (+ 9 16)
						=> 25
					

Clojure c'est EDN + Eval

Et d'autres extensions :

  • Core-Async
  • Specs
  • ClojureScript

Merci !

A vos claviers !


https://github.com/univalence/introclojure