Introduction Clojure - Geneva JUG - Octobre 2012
-
Upload
pablo-tamarit -
Category
Technology
-
view
1.041 -
download
0
description
Transcript of Introduction Clojure - Geneva JUG - Octobre 2012
Introduction àClojure
Pablo Tamarit30 octobre 2012
Geneva JUG
?2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012
1999 - 2005EIG
2007 - 2049CERN
N N
(def panier [{:nom "pommes", :type :fruits} {:nom "poires", :type :fruits} {:nom "scoubidous", :type :objets}])
(group-by :type panier)
{:fruits [{:type :fruits, :nom "pommes"} {:type :fruits, :nom "poires"}], :objets [{:type :objets, :nom "scoubidous"}]}
Avant-goût
• Partie philosophique
• Partie théorique
• Partie pratique
Partie philosophique
Clojure
• Créé en 2007• Simplicité• Pas d’orienté
objet!• Typage dynamique
• Tout est immutable• Pas d'état• Pas d'effets de
bord• Dialecte de Lisp!
+ λ
Lisp
• Inventé en 1958
John McCarthy1927 – 2011
Lisp
• Inventé en 1958• Lots ofIrritatingSuperfluousParentheses?
Lisp
• Inventé en 1958• Lots ofIrritatingSuperfluousParentheses
• Homoiconicité• Macros
paulgraham.com/avg.html
Partie théorique
Langage
• Syntaxe simple, vocabulaire riche.
– Syntaxe: données, fonctions
– Vocabulaire: fonctions
clojure.org/cheatsheet
Syntaxe: collectionsListe ("un" 2 3 3)
Vecteur ["un" 2 3 3]
Set #{"un" 2 3}
Map {:nom "Pablo", :age 28}
(:age {:nom "Pablo", :age 28})
28
Syntaxe: fonctionsAppel (+ 1 2 3)
Définition (defn abs [n] (if (neg? n) (- n) n))
Définition anonyme (fn [x y] (+ (abs x) (abs y)))
Définition anonyme sucrée #(+ (abs %1) (abs %2))
conditionthenelse
vecteurliste fn args
Vocabulaire: fonctions
(def coll [-42 5 -0.1])
(map abs coll) (42 5 0.1)
(reduce + 0 coll) -37.1
(filter neg? coll) (-42 -0.1)
InteropJava Clojure
new JFrame("Titre") (JFrame. "Titre")
Color.RED Color/RED
frame.setTitle("Titre2") (.setTitle frame "Titre2")frame.getTitle().toLowerCase() (.. frame getTitle toLowerCase)
frame.add(panel)frame.pack()frame.setVisible(true)
(doto frame (.add panel) (.pack) (.setVisible true))
24
13
Partie pratique
Quoi installer?
• Rien!<dependency> <groupId>org.clojure</groupId> <artifactId>clojure</artifactId> <version>1.4.0</version></dependency>
• Qui a-t-il dans le JAR?– La librairie– REPL: java -jar clojure.jar– Compilateur: .clj .class
Outils
• Build– leiningen– clojure-maven-plugin
• IDE– Counterclockwise (Eclipse)– La Clojure (IntelliJ IDEA)– Emacs!
Apprentissage
• Présentations:– blip.tv/clojure– infoq.com/clojure
• Livres:– clojurebook.com– joyofclojure.com
• Exercices:– 4clojure.com
Questions?
Crédits graphiques• Logo Clojure: © Tom Hickey (tomhickey.com)• Vue aérienne du LHC: © 2001 CERN (
cdsweb.cern.ch/record/42370)• La Trahison des images: © 1929 René Magritte• Duke models: © Sun Microsystems Inc. (duke.kenai.com/models)• Portrait de John McCarthy: © 2006 null0 (flic.kr/p/q39Sg)• L'Appel des cimes: © 1942 René Magritte• La Clairvoyance: © 1936 René Magritte• Cooled Beans: © 2008 Chris Bay (flic.kr/p/4z6CBA)• Gears: © Dima Yagnyuk (
thenounproject.com/noun/gears/#icon-No2174, thenounproject.com/Deadtype)
• Tools: © Jacob Hardbower (thenounproject.com/noun/tools/#icon-No4684, thenounproject.com/HeartWired)