Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction à Clojure

Introduction à Clojure

Pablo Tamarit

October 30, 2012
Tweet

More Decks by Pablo Tamarit

Other Decks in Programming

Transcript

  1. ? 2000 2001 2002 2003 2004 2005 2006 2007 2008

    2009 2010 2011 2012 1999 - 2005 EIG 2007 - 2049 CERN
  2. (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 
  3. 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! + λ
  4. Lisp • Inventé en 1958 • Lots of Irritating Superfluous

    Parentheses • Homoiconicité • Macros paulgraham.com/avg.html
  5. Syntaxe: collections Liste ("un" 2 3 3) Vecteur ["un" 2

    3 3] Set #{"un" 2 3} Map {:nom "Pablo", :age 28} (:age {:nom "Pablo", :age 28})  28
  6. Syntaxe: fonctions Appel (+ 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)) condition then else vecteur liste fn args
  7. 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)
  8. Interop Java 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)) 2 4 1 3
  9. 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
  10. Outils • Build – leiningen – clojure-maven-plugin • IDE –

    Counterclockwise (Eclipse) – La Clojure (IntelliJ IDEA) – Emacs!
  11. Apprentissage • Présentations: – blip.tv/clojure – infoq.com/clojure • Livres: –

    clojurebook.com – joyofclojure.com • Exercices: – 4clojure.com
  12. 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)