Concepts des langages de. Introduction à Clojure



Documents pareils
Langage Java. Classe de première SI

Projet de programmation (IK3) : TP n 1 Correction

Les chaînes de caractères

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Plan du cours. Historique du langage Nouveautés de Java 7

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Java Licence Professionnelle CISII,

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Introduction au langage C

Programmer en JAVA. par Tama

Chapitre 10. Les interfaces Comparable et Comparator 1

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Programmation en Java IUT GEII (MC-II1) 1

Une introduction à Java

TD3: tableaux avancées, première classe et chaînes

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

as Architecture des Systèmes d Information

INF 321 : mémento de la syntaxe de Java

Programme Compte bancaire (code)

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Présentation du langage et premières fonctions

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

STAGE IREM 0- Premiers pas en Python

ACTIVITÉ DE PROGRAMMATION

Programmation par les Objets en Java

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

TP 1. Prise en main du langage Python

Initiation à la programmation en Python

Java 1.5 : principales nouveautés

Algorithmique et Programmation, IMA

Package Java.util Classe générique

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

LES TYPES DE DONNÉES DU LANGAGE PASCAL

length : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2


Recherche dans un tableau

Tp 1 correction. Structures de données (IF2)

Notions fondamentales du langage C# Version 1.0

Programmation. fonctionnelle, impérative, logique et orientée objet

Environnements de développement (intégrés)

Java c est quoi? Java pourquoi?

Java Licence Professionnelle CISII,

TP1 : Initiation à Java et Eclipse

TD/TP PAC - Programmation n 3

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

Utilisation d objets : String et ArrayList

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Derrière toi Une machine virtuelle!

Introduction à JDBC. Accès aux bases de données en Java

OpenPaaS Le réseau social d'entreprise

OCL - Object Constraint Language

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

PROGRAMMATION PAR OBJETS

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

4. Groupement d objets

TP, première séquence d exercices.

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Cours d Algorithmique et de Langage C v 3.0

F. Barthélemy. 17 mai 2005

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Programmation C++ (débutant)/instructions for, while et do...while

Conventions d écriture et outils de mise au point

Apprendre Java en 154 minutes

Corrigé des exercices sur les références

Gestion distribuée (par sockets) de banque en Java

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Bases Java - Eclipse / Netbeans

Cours 1: Java et les objets

Architecture Orientée Service, JSON et API REST

Le langage procédural PL-PGSQL

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

TD/TP PAC - Programmation n 3

Premiers Pas en Programmation Objet : les Classes et les Objets

Lier Erlang avec d autres langages de programmation

Sommaire. 2 LINQ to Objects

Machines Virtuelles. et bazard autour. Rémi Forax

Introduction à MATLAB R

Programmation Web. Madalina Croitoru IUT Montpellier

SUPPORT DE COURS. Langage C

Initiation à JAVA et à la programmation objet.

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Objets et Programmation. origine des langages orientés-objet

Programmation avec des objets : Cours 7. Menu du jour

Cours d algorithmique pour la classe de 2nde

Remote Method Invocation Les classes implémentant Serializable

R, Bonnes pratiques. Christophe Genolini

Transcription:

Concepts des langages de programmation Introduction à Clojure

Plan C'est quoi clojure? Types et structures de données Fonctions et expressions dans Clojure Commentaires en Clojure Définition de variables et affectation Instructions conditionnelles et itérations Listes et fonctions Quelques aspects avancés Interaction avec Java Exemples Clojure et Netbeans 2

Plan C'est quoi clojure? Types et structures de données Fonctions et expressions dans Clojure Commentaires en Clojure Définition de variables et affectation Instructions conditionnelles et itérations Listes et fonctions Quelques aspects avancés Interaction avec Java Exemples Clojure et Netbeans 3

C'est quoi Clojure? Un langage de programmation fonctionnel Met l'accent sur l'immutabilité Pas orienté objet Évaluation paresseuse Fonctions d'ordre supérieures Une fonction peut prendre d'autres fonctions en tant que arguments Une fonction peut retourner des fonctions en résultat 4

C'est quoi Clojure? (suite) Typage dynamique Compilé : en byte-code de la JVM Java 5 et plus Il existe aussi une version pour la plateforme.net ClojureCLR (version beta) C'est le lisp de la JVM et du.net 5

C'est quoi Clojure? (suite) Les blocks d'instructions sont délimités par des parenthèses '(' ')' au lieu des accolades de Java et Scala Notation prefixe (+ 1 4) ; 5 (+ 1 2 3) ; 6 6

Plan C'est quoi clojure? Types et structures de données Fonctions et expressions dans Clojure Commentaires en Clojure Définition de variables et affectation Instructions conditionnelles et itérations Listes et fonctions Quelques aspects avancés Interaction avec Java Exemples Clojure et Netbeans 7

Types de données atomiques Entiers : 1, 23, 4466677, Chaînes de caractères : "Ceci est une chaîne" Caractères : \a \b \c \d. \z Symboles : :mon_symbol_1, :mon_symbol_2 Booléens : true, false Null : nil Expressions régulières : #{a*b}. 8

Structures de données Listes (samedi, dimanche, lundi, mardi, mercredi, jeudi, vendredi) (1, 2, 3) (list 1, 2, 3) Vecteurs [samedi, dimanche, lundi, mardi, mercredi, jeudi, vendredi] [1, 2, 3] (vector 1 2 3) 9

Structures de données (suite) Tables de hachage {:a 1, :b 2, :t 3} Ensembles #{1 2 3} 10

Structures de données (suite) Quelques fonctions utiles sur les listes : (first '("one" "two" "three")) ; retournera le premier élément (one) (rest '("one" "two" "three")) ; retournera tous les éléments excepté le premier (cons 1 '(2 3)) ; retourna une nouvelle liste : (1 2 3) 11

Structures de données (suite) Récupérer l'élément correspondant à une clé d'une table de hachage (get {"a" 1, "b" 2, "c" 3} "a") ; retournera : 1 ({"a" 1, "b" 2, "c" 3} "a") ; retournera : 1 (get {"a" 1, "b" 2, "c" 3} "d") ; retournera : nil ({"a" 1, "b" 2, "c" 3} "d") ; retournera : nil (:a {:a 1, :b 2, :c 3}) ; retournera 1 12

Plan C'est quoi clojure? Types et structures de données Fonctions et expressions dans Clojure Commentaires en Clojure Définition de variables et affectation Instructions conditionnelles et itérations Listes et fonctions Quelques aspects avancés Interaction avec Java Exemples Clojure et Netbeans 13

Fonctions dans Clojure Définition de fonction en Clojure : defn(fonction [x] (+ x 10) ) Définition de fonction en Java : int fonction(int x) { return x + 10; } Appel de fonction en Clojure : (nom-fonction arg1 arg2 arg3) (fonction 5) Appel de fonction en Java : nom-fonction(arg1, arg2, arg3); fonction(5); 14

Fonctions dans Clojure (suite) Affichage de chaînes de caractères : Clojure : (defn hello [name] ( println "Hello," name ) ) Java : public void hello(string name) { System.out.println("Hello, " + name); } (println "Hello," name) == (println (str("hello, " name))) str : concatine des chaînes de caractères 15

Expressions Clojure (suite) Expressions en Clojure : (+ 3 5) ; résultat : 8 (< 2 4) ; résultat : true (+ 3 5 56 7 89) ; résultat : 160 (+) ; résultat : 0 (*) ; résultat : 1 Si aucun argument n'est fourni à une fonction qui nécessite un, l'élément identité est retourné Expressions en Java : 3 + 5; 2 < 4 ; 3 + 5 + 56 + 7 + 89 ; Pas d'équivalent 16

Plan C'est quoi clojure? Types et structures de données Fonctions et expressions dans Clojure Commentaires en Clojure Définition de variables et affectation Instructions conditionnelles et itérations Listes et fonctions Quelques aspects avancés Interaction avec Java Exemples Clojure et Netbeans 17

Commentaires en Clojure ; ceci est un commentaire sur une seule ligne (comment Ceci est un commentaire sur plusieurs lignes ) 18

Plan C'est quoi clojure? Types et structures de données Fonctions et expressions dans Clojure Commentaires en Clojure Définition de variables et affectation Instructions conditionnelles et itérations Listes et fonctions Quelques aspects avancés Interaction avec Java Exemples Clojure et Netbeans 19

Définition de variables et affectation Définition de variables en Clojure : (def i 10 ) (def chaine "Salut" ) Définition de variables en Java : int i 10; String chaine = "Salut"; 20

Définition de variables et affectation (suite) Comment effectuer une affectation? Deux possibilité : 1. Créer une nouvelle variable Exemple : (def a 5) (def a (+ 1 a)) (println a) 2. Utiliser la macro let pour créer une variable locale Exemple : (def a 5) (let [a (+ 1 a)] (println a)) ; valeur de a est : 6 (println a) ; valeur de a est : 5 21

Plan C'est quoi clojure? Types et structures de données Fonctions et expressions dans Clojure Commentaires en Clojure Définition de variables et affectation Instructions conditionnelles et itérations Listes et fonctions Quelques aspects avancés Interaction avec Java Exemples Clojure et Netbeans 22

Instructions conditionnelles If else : (if condition then-expression else-expression) (if (< 4 2) (println "4 inférieur à 2") (println "2 inférieur à 4")) When (If sans else) : (when condition expression) Équivalent à : (if condition then-expression) (when (< 2 4) (println "2 inférieur à 4")) When not : (when-not condition expression) (when-not (< 4 2) (println "4 n'est pas inférieur à 2")) 23

Exemple d'utilisation de l'instruction conditionnelle if Calcul du factoriel : Clojure : (defn fac [n] (if (== n 1) 1 (* n (fac (- n 1))) ) ) Java : public int fac(int n) { if (n == 1) return 1; else return n * fac(n-1); } 24

Instructions conditionnelles (suite) Plusieurs conditions et expressions : (cond condition1 expression1 condition2 expression2 true expressionn) Seulement l'expression associée à la première condition évaluée à true est exécutée (condp predicat condition1 expression1 condition2 expression2 true expressionn) Seulement l'expression associée à la première condition évaluée avec predicat à true est exécutée 25

Exemple d'utilisation de cond Fibonacci : (defn fib [n] (cond (== 0 n) 0 (== 1 n) 1 (< 1 n) (+ (fib (- n 1)) (fib (- n 2))) ) ) 26

Exemple d'utilisation de condp ( let [a 5] (condp == a 1 (println "Salut" ) 5 (println "Bonjour") ) ) 27

Instructions itératives while : (while condition expression modification_condition) Exemple (def i 5) (while (> i 0) (println "i")(- i 1)) dotimes : (dotimes [x nombre-fois] expression) ; x : indice de l'itération courante Exemple (dotimes [i 5] (println "i")) 28

Instructions itératives (suite) loop : (loop [variable valeur_initiale] code recur (inc dec variable)) Exemple (loop [i 0] (when (< i 5) (println i) (recur (inc i)) ) ) 29

Instructions itératives (suite) loop avec un pas d'incrémentation différent de 1: (loop [variable valeur_initiale] code recur (op variable nombre_incr_ou_dec)) Exemple (loop [i 0] ) (when (< i 5) ) (println i) (recur (+ i 2)) 30

Plan C'est quoi clojure? Types et structures de données Fonctions et expressions dans Clojure Commentaires en Clojure Définition de variables et affectation Instructions conditionnelles et itérations Listes et fonctions Quelques aspects avancés Interaction avec Java Exemples Clojure et Netbeans 31

Listes et fonctions Les listes se déclarent avec la syntaxe : (1 2 4) Lorsque Clojure rencontre cette syntaxe, il essaie de l'évaluer (en tant que fonction) : Essaie d'appeler la fonction 1 pour laquelle on a associé les attributs 2 et 4 Ce qui génère l'erreur suivante : user=> (1 2 3) #<CompilerException java.lang.classcastexception: java.lang.integer cannot be cast to clojure.lang.ifn (NO_SOURCE_FILE:0)> Pour dire à Clojure que ce n'est pas une fonction, on précède la déclaration du caractère " ' " '(1 2 4) 32

Plan C'est quoi clojure? Types et structures de données Fonctions et expressions dans Clojure Commentaires en Clojure Définition de variables et affectation Instructions conditionnelles et itérations Listes et fonctions Quelques aspects avancés Interaction avec Java Exemples Clojure et Netbeans 33

Fonctions avec un nombre variables d'arguments Clojure supporte le polymorphisme : Fonctions portant le même nom mais avec : Un nombre de paramètres variable Un corps différent Deux façons différentes Première possibilité : (defn nom_fonction ) ([params1] corps1 ) ([params2] corps2 ). 34

Fonctions avec un nombre variables d'arguments (suite) Exemple (defn say_hello ([nom] ) (println "salut " nom "!") ) ([] ) (println "Salut anonyme!") 35

Fonctions avec un nombre variable d'arguments (suite) Même exemple écrit autrement (plus compact) (defn say_hello ([nom] (println "salut " nom "!") ) ) ([] ) (say_hello "") 36

Fonctions avec un nombre variables d'arguments (suite) Deuxième possibilité : (defn nom_fonction [& params] corps ) Exemple : (defn compter_nombre_params [& params] (count params) ) 37

Fonctions anonymes Une fonction anonyme est une fonction qui n'a pas de nom Dans Clojure, une fonction anonyme se déclare avec le mot clé fn Pourquoi les fonctions anonymes? La fonction est seulement utilisée à l'intérieur d'une autre fonction Les fonctions anonymes sont optionnelles et ne sont donc pas indispensables Les utiliser si elle rendent votre code plus lisible 38

Fonctions anonymes (suite) Syntaxe d'une fonction anonyme : (fn [parametres] corps_de_la_fonction) Exemple : ( ) (fn [x] (* 10 x)) 20 ; retournera : 200 39

Map Utilisation de map : ((if true dec) 3) ; si true alors appeler la fonction dec sur 3 Appeler la fonction dec sur plusieurs éléments (d'un vecteur ou d'une liste) : (map (if true dec) [1 2 3]) ; retournera : (0 1 2) (map (if true dec) '(1 2 3)) ; même résultat : (0 1 2) 40

Comment exécuter plusieurs instructions de manière consécutive? Utiliser do Do permet d'enchaîner plusieurs instructions et évaluer la dernière expression comme étant la valeur de retour Exemples ((println "salut 1" )(println "salut 2" )) Retournera : salut 1 salut 2 #<CompilerException java.lang.nullpointerexception (NO_SOURCE_FILE:0)> 41

Comment exécuter plusieurs instructions de manière consécutive? (suite) Exemples (suite) (do (println "salut 1" )(println "salut 2" )) Retournera : salut 1 salut 2 nil (do (println "salut 1" )(println "salut 2" ) (+ 4 1)) Retournera : salut 1 salut 2 5 Remarque : when fait la même chose que do et retourne la valeur évaluée seulement si la condition est vérifiée 42

Plan C'est quoi clojure? Types et structures de données Fonctions et expressions dans Clojure Commentaires en Clojure Définition de variables et affectation Instructions conditionnelles et itérations Listes et fonctions Quelques aspects avancés Interaction avec Java Exemples Clojure et Netbeans 43

Appel de méthodes de la classe String de Java à partir de Clojure Les méthodes de la classes String de Java peuvent être appelées directement à partir de Clojure (à l'exception de tostring) Exemples : (.touppercase "salut") ; retournera : SALUT (.replace (.touppercase "abc") "B" "-") ; retournera : A-C Le point (.) indique à Clojure qu'on appelle une méthode Java 44

Plan C'est quoi clojure? Types et structures de données Fonctions et expressions dans Clojure Commentaires en Clojure Définition de variables et affectation Instructions conditionnelles et itérations Listes et fonctions Quelques aspects avancés Interaction avec Java Exemples Clojure et Netbeans 45

Quelques exemples Calcul de la somme Calcul de la moyenne 46

Calcul de la somme (defn sum 47 ) ([] 0 ) ([x] x ) ([x & more] ) (+ x (apply sum more) )

Calcul de la moyenne (defn average ([] 0) ([x] x) ([x & more] (/ (+ x (apply sum more)) (+ 1 (count more))) ) ) 48

Plan C'est quoi clojure? Types et structures de données Fonctions et expressions dans Clojure Commentaires en Clojure Définition de variables et affectation Instructions conditionnelles et itérations Listes et fonctions Quelques aspects avancés Interaction avec Java Exemples Clojure et Netbeans 49

Clojure et Netbeans Un plugin Netbeans pour programmer avec Clojure est disponible Installation du plugin : Télécharger le plugin Netbeans pour Clojure de la page Web du cours Décompresser l'archive Suivre les étapes indiquées par les captures d'écran des diapositifs qui suivent 50

Installation du plugin 51

Installation du plugin (suite) 52

Installation du plugin (suite) 53

Installation du plugin (suite) 54

Installation du plugin (suite) 55

Installation du plugin (suite) 56

Installation du plugin (suite) 57

Création d'un nouveau projet Clojure 58

Création d'un nouveau projet Clojure (suite) 59

Création d'un nouveau projet Clojure (suite) 60

Création d'un nouveau projet Clojure (suite) 61

Création d'un nouveau projet Clojure (suite) 62

Création d'un nouveau projet Clojure (suite) 63

Console Clojure interactive Clojure vient avec une console qui permet d'écrire et d'exécuter de manière interactive du code Clojure Boucle de lecture, évaluation et affichage (REPL:readeval-print loop) Comment utiliser cette console avec Netbeans? 64

Console Clojure interactive (suite) 65

Console Clojure interactive (suite) 66

Console Clojure interactive (suite) 67

Console Clojure et documentation des fonctions offertes Afin de connaître l'utilité d'une fonction/macro offerte par Clojure, il suffit d'appeler la fonction doc suivie du nom de la fonction/macro désirée Exemple : 68

Références Livre : ProgrammingClojure. Stuart Halloway 2009. http://clojure.org http://clojure.blip.tv/ http://jnb.ociweb.com/jnb/jnbmar2009.html http://en.wikibooks.org/wiki/clojure_programming 69