introduction clojure - geneva jug - octobre 2012
DESCRIPTION
Présentation de 15 minutes au Java User Group de Genève.TRANSCRIPT
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)