SlideShare une entreprise Scribd logo
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

PDF
Part1
PPTX
Vbisigk
PPTX
mis
PPTX
Javascript : que fait ce code?
PPTX
Développement de plug in sous eclipse
PPTX
Environnement de développement de bases de données
PPTX
Javascript un langage supérieur
PDF
Javascript pour les Développeurs WEB
Part1
Vbisigk
mis
Javascript : que fait ce code?
Développement de plug in sous eclipse
Environnement de développement de bases de données
Javascript un langage supérieur
Javascript pour les Développeurs WEB

Tendances (19)

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

En vedette (20)

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

Similaire à Université des langages scala (20)

PDF
Enib cours c.a.i. web - séance #5 : scala play! framework
PDF
OSIS 2017 - Scala REX dans Rudder
PPTX
Introduction Kotlin
PDF
Alphorm.com Formation Kotlin : Le Guide du Débutant
PPTX
Présentation Scala
PDF
Cours_Java.pdf
PDF
Anatomie d'une typeclass
PDF
La programmation fonctionnelle avec le langage OCaml
PPT
Java PROGRAMATION CLASSE INFORMATIQUE.ppt
PDF
Java uik-chap6-poo heritage v2 java
PDF
Java uik-chap6-poo heritage v2 java
PDF
Java uik-chap6-poo heritage v2 java
PDF
Java uik-chap6-poo heritage v2 java
PPT
Interface collectionsinter
PPTX
Tour d’horizon de scala
PDF
1Chapitre2_Généralités Java.pptx (1).pdf
PDF
5- understandinggJava_Collections_v4.pdf
PDF
Librairies Java qui changent la vie
PDF
Cours de Génie Logiciel / ESIEA 2016-17
PDF
Introduction à Play Framework 2
Enib cours c.a.i. web - séance #5 : scala play! framework
OSIS 2017 - Scala REX dans Rudder
Introduction Kotlin
Alphorm.com Formation Kotlin : Le Guide du Débutant
Présentation Scala
Cours_Java.pdf
Anatomie d'une typeclass
La programmation fonctionnelle avec le langage OCaml
Java PROGRAMATION CLASSE INFORMATIQUE.ppt
Java uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 java
Java uik-chap6-poo heritage v2 java
Interface collectionsinter
Tour d’horizon de scala
1Chapitre2_Généralités Java.pptx (1).pdf
5- understandinggJava_Collections_v4.pdf
Librairies Java qui changent la vie
Cours de Génie Logiciel / ESIEA 2016-17
Introduction à Play Framework 2

Plus de Fabrice Sznajderman (6)

PDF
Lagom framework - Touraine Tech 2018
PDF
The beauty of pictures
PDF
Lagom, reactive framework(paris jug2017)
PDF
Lagom : Reactive microservice framework
PDF
La gestion des droits numériques - CNAM
PDF
Paris jug option
Lagom framework - Touraine Tech 2018
The beauty of pictures
Lagom, reactive framework(paris jug2017)
Lagom : Reactive microservice framework
La gestion des droits numériques - CNAM
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