SlideShare une entreprise Scribd logo
1  sur  46
Télécharger pour lire hors ligne
SCALA
Université des languages
Fabrice Sznajderman
Roadmap
Présentation du language Scala
Les labs
Debriefs
Historique
➢ 2001 : Création du langage par Martin Odersky
➢ 2003 : 1.0
➢ 2006 : 2.0
➢ 2008 : 2.8
➢ 2011 : 2.09
➢ fin 2012 : 2.10
➢ juin 2015 : 2.11.7
➢ janvier 2016 : 2.12
Généralités
➢ Scala pour Scalable Langage
➢ Language fonctionnel / objet
➢ Fonctionnant sur la JVM
➢ Interopérabilité avec la plate-forme .NET
Environnement et outils
Outils - SBT overview
● Comparable à Maven
● Compilation incrémentale à l'aide d'informations fournies par le compilateur
● Compilation et lancement des tests en continu
● Support natif des principaux frameworks de tests Scala (Junit via un
plugin)
● Exécution en parallèle des tâches (ainsi que les tests unitaires)
● Gestion de projet simple ou multi-projets
● Basé sur le principe de convention over configuration
● Continous testing
Outils - REPL
● Appréhender la syntaxe et tester rapidement du code
● Pratique et économique en ressources
● Convient plus à des fonctions simples qu'à tester des designs
entiers avec des classes / traits et autres
● Excellent outil d'apprentissage permettant de se familiariser
avec le langage et d’appréhender la mécanique de typage fort
Scala
● Ce n'est pas une nouveauté dans le monde de la
programmation fonctionnelle;Haskell dispose aussi d'un REPL
● Démo >
Outils - WorkSheet
● REPL graphique
● Disponible dans IDEA et Scala IDE
● Meilleurs support dans Scala IDE
● Démo >
Introduction au language
Scaladoc
Par rapport à la java doc, elle offre des
fonctionnalités supplémentaires.
http://www.scala-lang.org/api/current/#package
Déclaration d’une variable
val a: Int = 2
var a: Int = 4
val a = 5
Déclaration d’une fonction
def f(a:Int,b:Int):Int = {a+b}
def f(a:Int,b:Int) = a+b
val f = (a:Int,b:Int) => a+b
object : Introduction
Une ‘classe’ déclarée object est un singleton.
Scala nous garantit qu’il n’existera qu’une seule
instance dans la JVM.
object : Exemple
Déclaration:
object MonObject {
def inc(n:Int):Int=n+1
}
Utilisation:
MonObject.inc(1)
Déclaration d’une classe
class Eleve(age:Int)
class Eleve(val age:Int)
class Eleve(var age:Int)
Déclaration d’une case classe
case class Eleve(age:Int)
case class Eleve(val age:Int)
case class Eleve(var age:Int)
Une case classe c’est quoi?
➢ Déclaration simplifiée
➢ Exposition des paramètres du constructeur
➢ Attribut en lecture seul
➢ Constructeur sans l’opérateur new
➢ Equals & hashcode fournis par défaut
➢ Décomposable
Traits
➢ Proche des interfaces Java
➢ Mais peut contenir du code
➢ Beaucoup de traits au coeur du langage.
➢ Héritage simple de code (classe) comme en
Java mais héritage multiple de traits
Traits
S'utilise d'une manière similaire à une interface
en Java
➢ Si la classe n'hérite pas explicitement d'une
autre , alors héritage du trait avec le mot clé
extends
➢ Dans le cas contraire utilisation du mot clé
with
Déclaration d’un trait
trait SimpleTrait {
def log: Unit = (println("from SimpleTrait"))
}
trait SecondSimpleTrait {
def display:Unit=(println("from SecondSimpleTrait"))
}
Utilisation d’un trait
object MainRunner extends App{
class SimpleTraitUser extends SimpleTrait
class BothSimpleTraitUSer extends SimpleTrait with SecondSimpleTrait
val stu = new SimpleTraitUser()
val sstu = new BothSimpleTraitUSer()
stu.log
sstu.log
sstu.display
}
Equals vs ==
obj1 == obj2
>> va comparer l’égalité des objets via equals() et
hashcode()
(Il faut redéfinir les méthodes hashcode() et equals())
Pattern matching
➢ Structure conditionnelle avancée
➢ Test sur des types
➢ Décomposition des cases classes
Soit la case classe Humain
case class Humain(name:String, age:Int)
Pattern matching : Exemple
val choice = 2
choice match {
case 1 | 2 | 3 => "yes"
case 0 => "no"
case _ => "error"
}
val humain = Humain(“Paul”, 35)
humain match {
case Humain("Louis", _) => "c’est Louis"
case Humain("Paul", _) => "C’est Paul"
case _ => "C’est personne"
}
Type Option
Le type Option[A] permet de caractériser la
présence ou l’absence d’une valeur.
Ce type abstrait possède deux types concrets :
● None : L’absence d’une valeur
● Some : La présence d’une valeur
Le type Option
val présent:Option[Int] = Some(10)
val absent = None
Le type Option
def getVoiture(idx:Int):Option[Voiture]
getVoiture(10) match {
case Some(v) => println(Voiture)
case None => println(“voiture non trouvée”)
}
Notions d’implicit
➢ Ce mécanisme d’implicit permet de réaliser
une conversion.
➢ Outil très puissant et utile, mais il faut l’
utiliser avec précaution.
➢ Permet de faire de la conversion ou d’ajouter
du comportement dynamique à une classe
Notions d’implicit
val stringNumber = "123"
val y: Int = stringNumber
Résultat : Error!
math.max(stringNumber, 111)
Résultat : Error!
Il faut créer un convertisseur implicit pour régler le problème =>
Notions d’implicit
Définition d’une fonction de conversion
implicit def strToInt(x: String) = x.toInt
Notions d’implicit
val stringNumber = "123"
val y: Int = stringNumber
Résultat : Int = 123
math.max(stringNumber, 111)
Résultat : Int = 123
Les Collections : Les types de collections
➢ Traversable
○ Définition du comportement minimal d’un collection
➢ Iterable
○ Itération sur l’ensemble des éléments de la collection
➢ Seq
○ Ensemble d’éléments ordonnés
➢ Set
○ Ensemble d’éléments sans dupliqua
➢ Map
○ Ensemble d’éléments Clef-Valeur
Traversable[T]
Iterable[T]
Map[T]Set[T]Seq[T]
Les Collections : Les types de collections
Les Collections : Types de collections courants
➢ val numbers = List(1, 2, 3, 4)
➢ val set = Set(1, 1, 2) // résultat [1,2]
➢ val kv = Map(1 -> 2, 2-> 5)
➢ val seq = Seq(1, 2, 3)
Les Collections : Fonctions sur les collections
➢ map()
➢ filter()
➢ flatmap()
➢ foreach()
➢ etc
Les Collections : Exemple fonction map()
case class Eleve(name:String, age:Int)
val e1 = Eleve("michel", 30)
val e2 = Eleve("Louis", 18)
val e3 = Eleve("Patrick",23)
val eleves = List(e1, e2, e3)
val ages = eleves.map(e => e.age) //transformation de la liste d’élèves
Les Collections : Exemple fonction map()
Résultat après exécution :
eleves = List(Eleve(michel,30), Eleve(Louis,18), Eleve
(Patrick,23))
ages : List(30, 18, 23)
Les Collections : Exemple fonction filter()
val filteredEleves = eleves.filter { e => e.age >= 18 }
println(filteredEleves)
Résultat après exécution :
filteredEleves = List(Eleve(michel,30), Eleve(Patrick,23))
Les Collections : Monade
Selon les propriétés monadique des collections en Scala, il
est possible de chaîner les opérations réalisées sur une
collection :
println(eleves.filter(e => e.age > 18).map(e => e.age))
Résultat :
List(30, 23)
Test : ScalaTest - introduction
Il existe plusieurs librairies pour écrire des tests en Scala.
Nous utiliserons pour les labs ScalaTest avec l’API
FunSuite.
Cette Librairie ressemble de très près à l’approche JUnit
mais avec la simplification de la description du use-case
couvert par le test.
Test : ScalaTest
class ExempleTest extends FunSuite {
test("Description du use case") {
assert(3 == 3);
}
Ressources pour aller plus loin
● https://twitter.github.io/scala_school/index.html
● http://twitter.github.io/effectivescala/
● http://daily-scala.blogspot.fr/
● https://www.typesafe.com/community/core-
projects/scala
● Livre : programming Scala (bibliothèque Zenika)
● ...
LABs
Debrief

Contenu connexe

Tendances

Visual studio
Visual studioVisual studio
Visual studioISIG
 
Chap 03 poo en java partie2
Chap 03 poo en java partie2Chap 03 poo en java partie2
Chap 03 poo en java partie2Yassine Badri
 
Chap 03 poo en java partie1
Chap 03 poo en java partie1Chap 03 poo en java partie1
Chap 03 poo en java partie1Yassine Badri
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
 
Java chap 04 surcharge des méthodes [mode de compatibilité]
Java chap 04 surcharge des méthodes [mode de compatibilité]Java chap 04 surcharge des méthodes [mode de compatibilité]
Java chap 04 surcharge des méthodes [mode de compatibilité]Yassine Badri
 
Cours VB 2012 seance 1
Cours VB 2012 seance 1Cours VB 2012 seance 1
Cours VB 2012 seance 1ISIG
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDidier Plaindoux
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScripttarkan_
 
Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)ISIG
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de donnéesISIG
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoftdavrous
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objetsAbdoulaye Dieng
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6Julien CROUZET
 
Javascript les générateurs (generators)
Javascript   les générateurs (generators)Javascript   les générateurs (generators)
Javascript les générateurs (generators)Julien CROUZET
 
Mort au boilerplate avec scala meta
Mort au boilerplate avec scala metaMort au boilerplate avec scala meta
Mort au boilerplate avec scala metaDamien GOUYETTE
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scalaSOAT
 

Tendances (19)

Visual studio
Visual studioVisual studio
Visual studio
 
Chap 03 poo en java partie2
Chap 03 poo en java partie2Chap 03 poo en java partie2
Chap 03 poo en java partie2
 
Chap 03 poo en java partie1
Chap 03 poo en java partie1Chap 03 poo en java partie1
Chap 03 poo en java partie1
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Java chap 04 surcharge des méthodes [mode de compatibilité]
Java chap 04 surcharge des méthodes [mode de compatibilité]Java chap 04 surcharge des méthodes [mode de compatibilité]
Java chap 04 surcharge des méthodes [mode de compatibilité]
 
Cours VB 2012 seance 1
Cours VB 2012 seance 1Cours VB 2012 seance 1
Cours VB 2012 seance 1
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvements
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScript
 
Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de données
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoft
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objets
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6
 
Cours javascript v1
Cours javascript v1Cours javascript v1
Cours javascript v1
 
TD Java POO
TD Java POO TD Java POO
TD Java POO
 
Javascript les générateurs (generators)
Javascript   les générateurs (generators)Javascript   les générateurs (generators)
Javascript les générateurs (generators)
 
Mort au boilerplate avec scala meta
Mort au boilerplate avec scala metaMort au boilerplate avec scala meta
Mort au boilerplate avec scala meta
 
Memo java
Memo javaMemo java
Memo java
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scala
 

En vedette

Scala introduction
Scala introductionScala introduction
Scala introductionzvikapika
 
Maven c'est bien, SBT c'est mieux
Maven c'est bien, SBT c'est mieuxMaven c'est bien, SBT c'est mieux
Maven c'est bien, SBT c'est mieuxFabrice Sznajderman
 
Introduction à Scala - Michel Schinz - January 2010
Introduction à Scala - Michel Schinz - January 2010Introduction à Scala - Michel Schinz - January 2010
Introduction à Scala - Michel Schinz - January 2010JUG Lausanne
 
Scala in Action - Heiko Seeburger
Scala in Action - Heiko SeeburgerScala in Action - Heiko Seeburger
Scala in Action - Heiko SeeburgerJAX London
 
Getting Functional with Scala
Getting Functional with ScalaGetting Functional with Scala
Getting Functional with ScalaJorge Paez
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocutionParis_Storm_UG
 
Introduction to Spark with Scala
Introduction to Spark with ScalaIntroduction to Spark with Scala
Introduction to Spark with ScalaHimanshu Gupta
 
Scala - A Scalable Language
Scala - A Scalable LanguageScala - A Scalable Language
Scala - A Scalable LanguageMario Gleichmann
 
Scala at HUJI PL Seminar 2008
Scala at HUJI PL Seminar 2008Scala at HUJI PL Seminar 2008
Scala at HUJI PL Seminar 2008Yardena Meymann
 
Mémoire de fin d'étude - La big data et les réseaux sociaux
Mémoire de fin d'étude - La big data et les réseaux sociauxMémoire de fin d'étude - La big data et les réseaux sociaux
Mémoire de fin d'étude - La big data et les réseaux sociauxChloé Marty
 
Lagom, reactive framework(chtijug2016)
Lagom, reactive framework(chtijug2016) Lagom, reactive framework(chtijug2016)
Lagom, reactive framework(chtijug2016) Fabrice Sznajderman
 
Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...Ippon
 
BDX 2016 - Tzach zohar @ kenshoo
BDX 2016 - Tzach zohar  @ kenshooBDX 2016 - Tzach zohar  @ kenshoo
BDX 2016 - Tzach zohar @ kenshooIdo Shilon
 
Infographic on Scala Programming Language
Infographic on Scala Programming LanguageInfographic on Scala Programming Language
Infographic on Scala Programming LanguagePaddy Lock
 

En vedette (20)

Scala introduction
Scala introductionScala introduction
Scala introduction
 
Maven c'est bien, SBT c'est mieux
Maven c'est bien, SBT c'est mieuxMaven c'est bien, SBT c'est mieux
Maven c'est bien, SBT c'est mieux
 
Universitélang scala tools
Universitélang scala toolsUniversitélang scala tools
Universitélang scala tools
 
Les monades Scala, Java 8
Les monades Scala, Java 8Les monades Scala, Java 8
Les monades Scala, Java 8
 
Scala Intro
Scala IntroScala Intro
Scala Intro
 
Lagom, reactive framework
Lagom, reactive frameworkLagom, reactive framework
Lagom, reactive framework
 
Introduction à Scala - Michel Schinz - January 2010
Introduction à Scala - Michel Schinz - January 2010Introduction à Scala - Michel Schinz - January 2010
Introduction à Scala - Michel Schinz - January 2010
 
Scala in Action - Heiko Seeburger
Scala in Action - Heiko SeeburgerScala in Action - Heiko Seeburger
Scala in Action - Heiko Seeburger
 
Getting Functional with Scala
Getting Functional with ScalaGetting Functional with Scala
Getting Functional with Scala
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocution
 
Introduction to Spark with Scala
Introduction to Spark with ScalaIntroduction to Spark with Scala
Introduction to Spark with Scala
 
Soutenance ysance
Soutenance ysanceSoutenance ysance
Soutenance ysance
 
Hammurabi
HammurabiHammurabi
Hammurabi
 
Scala - A Scalable Language
Scala - A Scalable LanguageScala - A Scalable Language
Scala - A Scalable Language
 
Scala at HUJI PL Seminar 2008
Scala at HUJI PL Seminar 2008Scala at HUJI PL Seminar 2008
Scala at HUJI PL Seminar 2008
 
Mémoire de fin d'étude - La big data et les réseaux sociaux
Mémoire de fin d'étude - La big data et les réseaux sociauxMémoire de fin d'étude - La big data et les réseaux sociaux
Mémoire de fin d'étude - La big data et les réseaux sociaux
 
Lagom, reactive framework(chtijug2016)
Lagom, reactive framework(chtijug2016) Lagom, reactive framework(chtijug2016)
Lagom, reactive framework(chtijug2016)
 
Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...
 
BDX 2016 - Tzach zohar @ kenshoo
BDX 2016 - Tzach zohar  @ kenshooBDX 2016 - Tzach zohar  @ kenshoo
BDX 2016 - Tzach zohar @ kenshoo
 
Infographic on Scala Programming Language
Infographic on Scala Programming LanguageInfographic on Scala Programming Language
Infographic on Scala Programming Language
 

Similaire à Université des langages scala

Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Loic Yon
 
Introduction Clojure - Geneva JUG - Octobre 2012
Introduction Clojure - Geneva JUG - Octobre 2012Introduction Clojure - Geneva JUG - Octobre 2012
Introduction Clojure - Geneva JUG - Octobre 2012Pablo Tamarit
 
Librairies Java qui changent la vie
Librairies Java qui changent la vieLibrairies Java qui changent la vie
Librairies Java qui changent la viecluelessjoe
 
Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Mamadou Oury Ba
 
Mix it 2011 - Clojure
Mix it 2011 - ClojureMix it 2011 - Clojure
Mix it 2011 - Clojurelolopetit
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech daysJean-Pierre Vincent
 
Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018salah fenni
 
intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPfrwebhelp
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinterRYMAA
 
POO_Java_BasesLangage.pdf
POO_Java_BasesLangage.pdfPOO_Java_BasesLangage.pdf
POO_Java_BasesLangage.pdfLarbaSAWADOGO2
 
Java-3eme partie.pptx
Java-3eme partie.pptxJava-3eme partie.pptx
Java-3eme partie.pptxHassanAbdel
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesECAM Brussels Engineering School
 
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#MSDEVMTL
 
Aide mémoire de caml
Aide mémoire de camlAide mémoire de caml
Aide mémoire de camlzan
 
cour de compilation
cour de compilation cour de compilation
cour de compilation Ens Kouba
 
Programmation en VBA Introduction au language Visual Basic for Applications ...
Programmation en VBA  Introduction au language Visual Basic for Applications ...Programmation en VBA  Introduction au language Visual Basic for Applications ...
Programmation en VBA Introduction au language Visual Basic for Applications ...Bassim ELKHATTABY
 

Similaire à Université des langages scala (20)

Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Introduction Clojure - Geneva JUG - Octobre 2012
Introduction Clojure - Geneva JUG - Octobre 2012Introduction Clojure - Geneva JUG - Octobre 2012
Introduction Clojure - Geneva JUG - Octobre 2012
 
Librairies Java qui changent la vie
Librairies Java qui changent la vieLibrairies Java qui changent la vie
Librairies Java qui changent la vie
 
Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5
 
Mix it 2011 - Clojure
Mix it 2011 - ClojureMix it 2011 - Clojure
Mix it 2011 - Clojure
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech days
 
Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018
 
C++ 11/14
C++ 11/14C++ 11/14
C++ 11/14
 
intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APP
 
langage C++
langage C++langage C++
langage C++
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinter
 
POO_Java_BasesLangage.pdf
POO_Java_BasesLangage.pdfPOO_Java_BasesLangage.pdf
POO_Java_BasesLangage.pdf
 
Java-3eme partie.pptx
Java-3eme partie.pptxJava-3eme partie.pptx
Java-3eme partie.pptx
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
 
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#
 
Introduction au Jquery
Introduction au JqueryIntroduction au Jquery
Introduction au Jquery
 
Aide mémoire de caml
Aide mémoire de camlAide mémoire de caml
Aide mémoire de caml
 
cour de compilation
cour de compilation cour de compilation
cour de compilation
 
Programmation en VBA Introduction au language Visual Basic for Applications ...
Programmation en VBA  Introduction au language Visual Basic for Applications ...Programmation en VBA  Introduction au language Visual Basic for Applications ...
Programmation en VBA Introduction au language Visual Basic for Applications ...
 

Plus de Fabrice Sznajderman

Lagom framework - Touraine Tech 2018
Lagom framework - Touraine Tech 2018Lagom framework - Touraine Tech 2018
Lagom framework - Touraine Tech 2018Fabrice Sznajderman
 
Lagom, reactive framework(paris jug2017)
Lagom, reactive framework(paris jug2017)Lagom, reactive framework(paris jug2017)
Lagom, reactive framework(paris jug2017)Fabrice Sznajderman
 
Lagom : Reactive microservice framework
Lagom : Reactive microservice frameworkLagom : Reactive microservice framework
Lagom : Reactive microservice frameworkFabrice Sznajderman
 
La gestion des droits numériques - CNAM
La gestion des droits numériques - CNAMLa gestion des droits numériques - CNAM
La gestion des droits numériques - CNAMFabrice Sznajderman
 

Plus de Fabrice Sznajderman (6)

Lagom framework - Touraine Tech 2018
Lagom framework - Touraine Tech 2018Lagom framework - Touraine Tech 2018
Lagom framework - Touraine Tech 2018
 
The beauty of pictures
 The beauty of pictures The beauty of pictures
The beauty of pictures
 
Lagom, reactive framework(paris jug2017)
Lagom, reactive framework(paris jug2017)Lagom, reactive framework(paris jug2017)
Lagom, reactive framework(paris jug2017)
 
Lagom : Reactive microservice framework
Lagom : Reactive microservice frameworkLagom : Reactive microservice framework
Lagom : Reactive microservice framework
 
La gestion des droits numériques - CNAM
La gestion des droits numériques - CNAMLa gestion des droits numériques - CNAM
La gestion des droits numériques - CNAM
 
Paris jug option
Paris jug optionParis jug option
Paris jug option
 

Université des langages scala

  • 2. Roadmap Présentation du language Scala Les labs Debriefs
  • 3. Historique ➢ 2001 : Création du langage par Martin Odersky ➢ 2003 : 1.0 ➢ 2006 : 2.0 ➢ 2008 : 2.8 ➢ 2011 : 2.09 ➢ fin 2012 : 2.10 ➢ juin 2015 : 2.11.7 ➢ janvier 2016 : 2.12
  • 4. Généralités ➢ Scala pour Scalable Langage ➢ Language fonctionnel / objet ➢ Fonctionnant sur la JVM ➢ Interopérabilité avec la plate-forme .NET
  • 6. Outils - SBT overview ● Comparable à Maven ● Compilation incrémentale à l'aide d'informations fournies par le compilateur ● Compilation et lancement des tests en continu ● Support natif des principaux frameworks de tests Scala (Junit via un plugin) ● Exécution en parallèle des tâches (ainsi que les tests unitaires) ● Gestion de projet simple ou multi-projets ● Basé sur le principe de convention over configuration ● Continous testing
  • 7. Outils - REPL ● Appréhender la syntaxe et tester rapidement du code ● Pratique et économique en ressources ● Convient plus à des fonctions simples qu'à tester des designs entiers avec des classes / traits et autres ● Excellent outil d'apprentissage permettant de se familiariser avec le langage et d’appréhender la mécanique de typage fort Scala ● Ce n'est pas une nouveauté dans le monde de la programmation fonctionnelle;Haskell dispose aussi d'un REPL ● Démo >
  • 8. Outils - WorkSheet ● REPL graphique ● Disponible dans IDEA et Scala IDE ● Meilleurs support dans Scala IDE ● Démo >
  • 10. Scaladoc Par rapport à la java doc, elle offre des fonctionnalités supplémentaires. http://www.scala-lang.org/api/current/#package
  • 11. Déclaration d’une variable val a: Int = 2 var a: Int = 4 val a = 5
  • 12. Déclaration d’une fonction def f(a:Int,b:Int):Int = {a+b} def f(a:Int,b:Int) = a+b val f = (a:Int,b:Int) => a+b
  • 13. object : Introduction Une ‘classe’ déclarée object est un singleton. Scala nous garantit qu’il n’existera qu’une seule instance dans la JVM.
  • 14. object : Exemple Déclaration: object MonObject { def inc(n:Int):Int=n+1 } Utilisation: MonObject.inc(1)
  • 15. Déclaration d’une classe class Eleve(age:Int) class Eleve(val age:Int) class Eleve(var age:Int)
  • 16. Déclaration d’une case classe case class Eleve(age:Int) case class Eleve(val age:Int) case class Eleve(var age:Int)
  • 17. Une case classe c’est quoi? ➢ Déclaration simplifiée ➢ Exposition des paramètres du constructeur ➢ Attribut en lecture seul ➢ Constructeur sans l’opérateur new ➢ Equals & hashcode fournis par défaut ➢ Décomposable
  • 18. Traits ➢ Proche des interfaces Java ➢ Mais peut contenir du code ➢ Beaucoup de traits au coeur du langage. ➢ Héritage simple de code (classe) comme en Java mais héritage multiple de traits
  • 19. Traits S'utilise d'une manière similaire à une interface en Java ➢ Si la classe n'hérite pas explicitement d'une autre , alors héritage du trait avec le mot clé extends ➢ Dans le cas contraire utilisation du mot clé with
  • 20. Déclaration d’un trait trait SimpleTrait { def log: Unit = (println("from SimpleTrait")) } trait SecondSimpleTrait { def display:Unit=(println("from SecondSimpleTrait")) }
  • 21. Utilisation d’un trait object MainRunner extends App{ class SimpleTraitUser extends SimpleTrait class BothSimpleTraitUSer extends SimpleTrait with SecondSimpleTrait val stu = new SimpleTraitUser() val sstu = new BothSimpleTraitUSer() stu.log sstu.log sstu.display }
  • 22. Equals vs == obj1 == obj2 >> va comparer l’égalité des objets via equals() et hashcode() (Il faut redéfinir les méthodes hashcode() et equals())
  • 23. Pattern matching ➢ Structure conditionnelle avancée ➢ Test sur des types ➢ Décomposition des cases classes
  • 24. Soit la case classe Humain case class Humain(name:String, age:Int)
  • 25. Pattern matching : Exemple val choice = 2 choice match { case 1 | 2 | 3 => "yes" case 0 => "no" case _ => "error" } val humain = Humain(“Paul”, 35) humain match { case Humain("Louis", _) => "c’est Louis" case Humain("Paul", _) => "C’est Paul" case _ => "C’est personne" }
  • 26. Type Option Le type Option[A] permet de caractériser la présence ou l’absence d’une valeur. Ce type abstrait possède deux types concrets : ● None : L’absence d’une valeur ● Some : La présence d’une valeur
  • 27. Le type Option val présent:Option[Int] = Some(10) val absent = None
  • 28. Le type Option def getVoiture(idx:Int):Option[Voiture] getVoiture(10) match { case Some(v) => println(Voiture) case None => println(“voiture non trouvée”) }
  • 29. Notions d’implicit ➢ Ce mécanisme d’implicit permet de réaliser une conversion. ➢ Outil très puissant et utile, mais il faut l’ utiliser avec précaution. ➢ Permet de faire de la conversion ou d’ajouter du comportement dynamique à une classe
  • 30. Notions d’implicit val stringNumber = "123" val y: Int = stringNumber Résultat : Error! math.max(stringNumber, 111) Résultat : Error! Il faut créer un convertisseur implicit pour régler le problème =>
  • 31. Notions d’implicit Définition d’une fonction de conversion implicit def strToInt(x: String) = x.toInt
  • 32. Notions d’implicit val stringNumber = "123" val y: Int = stringNumber Résultat : Int = 123 math.max(stringNumber, 111) Résultat : Int = 123
  • 33. Les Collections : Les types de collections ➢ Traversable ○ Définition du comportement minimal d’un collection ➢ Iterable ○ Itération sur l’ensemble des éléments de la collection ➢ Seq ○ Ensemble d’éléments ordonnés ➢ Set ○ Ensemble d’éléments sans dupliqua ➢ Map ○ Ensemble d’éléments Clef-Valeur
  • 35. Les Collections : Les types de collections
  • 36. Les Collections : Types de collections courants ➢ val numbers = List(1, 2, 3, 4) ➢ val set = Set(1, 1, 2) // résultat [1,2] ➢ val kv = Map(1 -> 2, 2-> 5) ➢ val seq = Seq(1, 2, 3)
  • 37. Les Collections : Fonctions sur les collections ➢ map() ➢ filter() ➢ flatmap() ➢ foreach() ➢ etc
  • 38. Les Collections : Exemple fonction map() case class Eleve(name:String, age:Int) val e1 = Eleve("michel", 30) val e2 = Eleve("Louis", 18) val e3 = Eleve("Patrick",23) val eleves = List(e1, e2, e3) val ages = eleves.map(e => e.age) //transformation de la liste d’élèves
  • 39. Les Collections : Exemple fonction map() Résultat après exécution : eleves = List(Eleve(michel,30), Eleve(Louis,18), Eleve (Patrick,23)) ages : List(30, 18, 23)
  • 40. Les Collections : Exemple fonction filter() val filteredEleves = eleves.filter { e => e.age >= 18 } println(filteredEleves) Résultat après exécution : filteredEleves = List(Eleve(michel,30), Eleve(Patrick,23))
  • 41. Les Collections : Monade Selon les propriétés monadique des collections en Scala, il est possible de chaîner les opérations réalisées sur une collection : println(eleves.filter(e => e.age > 18).map(e => e.age)) Résultat : List(30, 23)
  • 42. Test : ScalaTest - introduction Il existe plusieurs librairies pour écrire des tests en Scala. Nous utiliserons pour les labs ScalaTest avec l’API FunSuite. Cette Librairie ressemble de très près à l’approche JUnit mais avec la simplification de la description du use-case couvert par le test.
  • 43. Test : ScalaTest class ExempleTest extends FunSuite { test("Description du use case") { assert(3 == 3); }
  • 44. Ressources pour aller plus loin ● https://twitter.github.io/scala_school/index.html ● http://twitter.github.io/effectivescala/ ● http://daily-scala.blogspot.fr/ ● https://www.typesafe.com/community/core- projects/scala ● Livre : programming Scala (bibliothèque Zenika) ● ...
  • 45. LABs