SlideShare une entreprise Scribd logo
Introduction à
     Scala




   Introduction à Scala par Ludwine et Florent
Florent Lagrède
développeur Java chez voyages-sncf.com
@flowlag


Ludwine Probst
développeuse Java chez voyages-sncf.com
DuchessFr et GDG member
@nivdul
Plan de la soirée

            Introduction à Scala...
Partie 1
  Généralités
Partie 2
  Présentation des concepts
Partie 3
  Démonstration avec une appli
Histoire

Nom : scala vient de "scalable langage"
Auteur: Martin Odersky
Création : 2003
Lieu : EPFL (Lausanne)




But : être élégant et concis, mais pas que...
Dans la communauté

PSUG (Paris Scala User Group)
•   soirée chaque mois avec 60-100 membres
•   sujets techniques, retours d'expériences,
    présentations de projets open-source...
Scala en quelques mots

• langage mélangeant programmation orientée-
    objet et fonctionnelle
•   tourne sur la JVM
•   compatible avec les librairies Java
•   statiquement typé
•   soucis de la concurrence (immutable)
•   inférence de type
•   tout est objet (hiérarchie des classes)
•   et ça se veut être concis
// en Java
class Album {
   private int id;
   private String name;
   public Album(int id, String name) {
       this.id = id;
       this.name = name;
   }
}

// en Scala
class Album(id: Int, name: String)
La programmation fonctionnelle


•   exprime les fonctions au sens mathématique
•   exclut le changement d'état lors de l'évaluation
    de fonctions
•   élimine les effets de bords
•   s'oppose à la programmation impérative
Scala dans le milieu professionnel
Quelques outils pour coder en Scala

•   REPL (Read-Evaluate-Print Loop)
•   sbt (simple-build-tool)
•   éditeur de texte
    (sublimtext,notepad++...)
•   Eclipse/IntelliJ
    http://typesafe.com/stack/downloads/scala-ide
•   scaladoc     http://www.scala-lang.org/
Démo


•   création d'un projet scala via Eclipse
•   utilisation du worksheet
•   petits tests en scala via le REPL
•   compilation/exécution (tests) d'un projet via sbt
Objectifs de la soirée

•   présenter les bases, du moins certaines
    o   mutable/immutable, trait, case class, sealed,
        List, high order function, pattern matching...
    o   voir la syntaxe

•   regarder de près une appli en Scala
Présentation de concepts clés
Introduction à Scala par Ludwine et Florent
Les classes

Définition :

•   définition standard
•   pas de mot clé public
•   un fichier source peut contenir plusieurs classes
    et elles sont toutes par défaut public
Les case classes

Définition :
•   objet non modifiable après instanciation
•   méthodes equals, toString, hashcode...
    implicitées
•   constructeur implicité
•   pas de new
•   peut se décomposer avec la notion de Pattern
    Matching
Exemples


case class Album(id:Int, name:String)

Ces 3 écritures suivantes sont équivalentes :

val album = new Album(3, "Paris")
val album = Album(3, "Paris")
val album = Album.apply(3, "Paris")


album.name = qu'obtient-on???
Les getters/setters (1/2)

//Java
public class Image() {
     private String name;
     public String getName() {...}
     public void setName(String name) {...}
}


//Scala
class Image(var name:String)
Les getters/setters (2/2)

En scala,
 • les getters/setters sont générés pour la JVM
 • on peut les surcharger
 • ils sont privés si l'attribut est privé
 • il est possible d'empêcher leur génération avec
   la syntaxe suivante

  private[this] name:String
Val & Var

Définition :
•   val
     o déclaration d'attribut : variable non

       modifiable
     o déclaration de paramètre de classe : getter

       implicite
•   var
     o déclaration d'attribut : variable modifiable

     o déclaration de paramètre de classe : getter et

       setter implicite
Exemples

class Image(var name: String)

val imageA = new Image("MyImageA")
val imageB = new Image("MyImageB")

Si on écrit ça :
      imageA = imageB

Que se passe-t-il ?
Les traits

Définition :
c'est comme une class sauf qu'il y a le mot-clé
trait. C'est l'équivalent de l'interface en Java sauf
qu'on peut y implémenter des méthodes.

trait ImageInfos {
     val image:Image
     def ImageInfos:String = image.name
}
Exemples
Possibilité d'un héritage multiple :

trait ComputeAverageScore

trait AnotherOne

class Image extends ImageInfos with
ComputeAverageScore with AnotherOne {
     val name = "Paris"
}
Pas de paramètres de 'classe' :

trait ImageInfos(image: Image) // ne
compile pas
Les Collections

• Utilise le trait Iterable
• Immutable par défaut
• Fonctions d'ordre supérieure
  o   map
  o   filter
  o   foreach
Exemples de collection :
List, Map, Set, Vector...
Les Lists

Définition :
La classe List repose sur les deux case classes :

•   Nil représente une liste vide
•   :: (se prononce “cons”),

où x::xs représente la liste dont le premier
élément est x, suivi du reste des éléments xs.
Les Lists

Les 3 fonctions clé à retenir :

•   head : renvoie le premier élément d’une liste
•   tail : renvoie la liste excepté son premier
    élément
•   isEmpty : renvoie true si la liste est vide,
    false sinon
Quelques exemples...


val scores = List(1,2,3)val names =
List(“a”,“b”, “b”)
val list =
List(List(1,0),List(1,1),List(0,1))

val empty: List[Nothing] = List( )
val scores = 1 :: 2 :: 3 :: Nil
val names = “a” :: (“b” :: (“b” :: Nil))
Fonction partielle

Définition :
•   une fonction partielle qui s'exécute ou non en
    fonction de ses paramètres
•   elle doit obligatoirement définir 2 méthodes
     o isDefinedAt (condition d'exécution)

     o Apply (code exécuté)
Fonction partiellement appliquée



Définition :
•   fonction à laquelle on n'applique pas tous les
    arguments, créant ainsi une autre fonction.
•   peut appliquer aucun ou tous les arguments
    d'une fonction
Les fonctions de plus haut niveau

•   Expression lambda
     o x: Int => x + 1 est équivalent à

       f(x: Int) = {x + 1}
•   Peut prendre une autre fonction en paramètre
•   Peut être retournée en tant que résultat
•   Peut être déclarée à l'intérieur d'une autre fonction
•   Peut-être stockée dans une variable
Exemples :
map, filter, flatten, flatmap...
Les options (1/2)

Définition :




Le type Option désigne une valeur optionnelle et
c'est une Collection.
Les options (2/2)

L'intérêt des Options ?

Imaginons que l’on veuille trouver une
personne dans une BDD...

def findImage(id: Int): Option[Image]
Pattern Matching

Définition :
Le pattern matching peut être assimilé au switch
case d'autres langages comme Java.

e match {case p1 => e1 ... case pn => en }


pi représente les patterns et ei la valeur renvoyée
dans le cas où le pattern pi match e.

Erreur MatchError renvoyée si besoin.
Exemples (1/4)

    def applyEvent(event: Event) = event match
{
     case AddImage(image) => add(image)
     case RemoveImage(withId) =>
remove(withId)
     case SearchImages(term) => search(term)
     case _ => this.image
}

C'est quoi ce "_" ?
Exemples (2/4)


Avec les options :

case SortImages(criteria) => criteria match {
     case Some(criteria) => sort(criteria)
     case None => this.images

}
Exemples (3/4)

On peut faire du Pattern Matching sur un peu tout !

def describe(x: Any) = x match {

      case   5 => "five"
      case   true => "truth"
      case   "hello" => "hi!"
      case   Nil => "the empty list"
      case   _ => "something else"

 }
Exemples (4/4)

Avec les listes :

def eval(list:List[Int]) = list match {

    case Nil => println("vide")

    case x::Nil => println("un seul élément")

    case x::xs => println("au moins 2 élemts")
}
Sealed Trait

Définition : le mot-clé sealed devant un
trait :
ça facilite le Pattern Matching !

Exemple :
sealed trait Criteria
case class ByName extends Criteria
case class ByDate extends Criteria
Présentation de l'application


•   moteur de recherche d'image

•   le modèle : Image, Album

•   technos : scala 2.10
Quelques liens
Programming in Scala
                                  Scala in Depth

Scala for the impatient



Pour apprendre scala par la pratique :
            https://www.coursera.org/
Introduction à scala
Merci !

Contenu connexe

PDF
RGPD / GDPR : Principes, Démarche, Outils
PDF
Cours Big Data Chap5
PDF
RegeerAkkoordAccorddegouvernement-FR.pdf
PDF
Data mining - Introduction générale
PDF
Chapitre ii complexité et optimalité
PDF
Data mining - Classification - arbres de décision
PDF
TP1 Big Data - MapReduce
RGPD / GDPR : Principes, Démarche, Outils
Cours Big Data Chap5
RegeerAkkoordAccorddegouvernement-FR.pdf
Data mining - Introduction générale
Chapitre ii complexité et optimalité
Data mining - Classification - arbres de décision
TP1 Big Data - MapReduce

Tendances (20)

PDF
BigData_TP3 : Spark
PDF
BigData_TP1: Initiation à Hadoop et Map-Reduce
PDF
Apache SPARK ML : principes, concepts et mise en œuvre
PPTX
Chp1 - Introduction aux méthodologies de Conception
PDF
BigData_Chp2: Hadoop & Map-Reduce
PDF
Cours Big Data Chap4 - Spark
PPTX
Chp3 - ESB
PPTX
spark_intro_1208
PPTX
Apache hive introduction
PPTX
Introduction à Laravel
PPTX
Modele mvc
PDF
Spark SQL principes et fonctions
PDF
BigData_Chp3: Data Processing
PPTX
Session 14 - Hive
PPTX
Apache hive
PPTX
Introduction to Apache Hive(Big Data, Final Seminar)
PDF
Spark Operator—Deploy, Manage and Monitor Spark clusters on Kubernetes
PDF
Spark SQL
PDF
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
BigData_TP3 : Spark
BigData_TP1: Initiation à Hadoop et Map-Reduce
Apache SPARK ML : principes, concepts et mise en œuvre
Chp1 - Introduction aux méthodologies de Conception
BigData_Chp2: Hadoop & Map-Reduce
Cours Big Data Chap4 - Spark
Chp3 - ESB
spark_intro_1208
Apache hive introduction
Introduction à Laravel
Modele mvc
Spark SQL principes et fonctions
BigData_Chp3: Data Processing
Session 14 - Hive
Apache hive
Introduction to Apache Hive(Big Data, Final Seminar)
Spark Operator—Deploy, Manage and Monitor Spark clusters on Kubernetes
Spark SQL
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Publicité

En vedette (20)

PPT
Obsweb iscc
PPTX
Presentation lesson14
DOC
Flintgrant
PPTX
Le climat a chypre 2
PPTX
Equipment testing presentation
PPTX
Aviones
PDF
UNITED STATES - DAMAGE CONTROL TACTICS - CREDIBILITY ISSUES (French)
PDF
I Tnation 2 0 Fr 111001 3
PPTX
Forteresse Soroca
PPTX
Comput training
PDF
Parc office présentation_rachat_reprise_informatique_telecom_mobilier_brokera...
PPT
title
ODP
Management des idées
PPT
Alstom crée un référentiel de ses actifs informatiques en deux mois avec Simp...
PDF
BARACK OBAMA- UNDERSTANDING WILLIE LYNCH (French)
PPTX
Les canaux ioniques
PPTX
Projet computraining replay
PDF
recette macarons framboise
PDF
Formation réseaux sociaux – Commerce et Ecommerce
PPTX
Présentationrestauration de tableaux
Obsweb iscc
Presentation lesson14
Flintgrant
Le climat a chypre 2
Equipment testing presentation
Aviones
UNITED STATES - DAMAGE CONTROL TACTICS - CREDIBILITY ISSUES (French)
I Tnation 2 0 Fr 111001 3
Forteresse Soroca
Comput training
Parc office présentation_rachat_reprise_informatique_telecom_mobilier_brokera...
title
Management des idées
Alstom crée un référentiel de ses actifs informatiques en deux mois avec Simp...
BARACK OBAMA- UNDERSTANDING WILLIE LYNCH (French)
Les canaux ioniques
Projet computraining replay
recette macarons framboise
Formation réseaux sociaux – Commerce et Ecommerce
Présentationrestauration de tableaux
Publicité

Similaire à Introduction à scala (20)

PPTX
Introduction à TypeScript,language de programmation
PPTX
Javascript un langage supérieur
PDF
Université des langages scala
PPT
XB-Java.ppt
PPT
Langage Java et Programmation Orienté Objet
PPTX
expression lambda
PPT
Interface collectionsinter
PDF
Classes et Objets.pdf
PPTX
11-Cours de Géniel Logiciel
PPTX
Les Classe en Java
PPTX
Nouveautés de java 8
PDF
De java à swift en 2 temps trois mouvements
PDF
Part1
PPTX
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
PPTX
Csharp2 : classes et objets
DOCX
Améliorations dans Java depuis la version 5
PPT
PPTX
De Java à .NET
PPT
Java PROGRAMATION CLASSE INFORMATIQUE.ppt
PDF
Mix it 2011 - Clojure
Introduction à TypeScript,language de programmation
Javascript un langage supérieur
Université des langages scala
XB-Java.ppt
Langage Java et Programmation Orienté Objet
expression lambda
Interface collectionsinter
Classes et Objets.pdf
11-Cours de Géniel Logiciel
Les Classe en Java
Nouveautés de java 8
De java à swift en 2 temps trois mouvements
Part1
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Csharp2 : classes et objets
Améliorations dans Java depuis la version 5
De Java à .NET
Java PROGRAMATION CLASSE INFORMATIQUE.ppt
Mix it 2011 - Clojure

Plus de SOAT (20)

PPTX
Back from Microsoft //Build 2018
PDF
L'entreprise libérée
PDF
Amélioration continue, c'est l'affaire de tous !
PDF
JAVA 8 : Migration et enjeux stratégiques en entreprise
PPTX
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
PDF
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
PDF
1/3 : introduction to CDI - Antoine Sabot-Durand
PDF
2/3 : CDI advanced - Antoine Sabot-Durand
PPTX
Angular JS - Paterne Gaye-Guingnido
PPTX
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
PDF
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
PPTX
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
PPTX
Nio sur Netty par Mouhcine Moulou - 3 avril 2014
PDF
20140123 java8 lambdas_jose-paumard-soat
PDF
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
PPTX
Amazon Web Service par Bertrand Lehurt - 11 mars 2014
PPTX
ASP.Net Web API - Léonard Labat (18 février 2014)
PPTX
Xamarin et le développement natif d’applications Android, iOS et Windows en C#
PPTX
A la découverte du Responsive Web Design par Mathieu Parisot - Soat
PDF
MongoDB : la base NoSQL qui réinvente la gestion de données
Back from Microsoft //Build 2018
L'entreprise libérée
Amélioration continue, c'est l'affaire de tous !
JAVA 8 : Migration et enjeux stratégiques en entreprise
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand
2/3 : CDI advanced - Antoine Sabot-Durand
Angular JS - Paterne Gaye-Guingnido
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
Nio sur Netty par Mouhcine Moulou - 3 avril 2014
20140123 java8 lambdas_jose-paumard-soat
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...
Amazon Web Service par Bertrand Lehurt - 11 mars 2014
ASP.Net Web API - Léonard Labat (18 février 2014)
Xamarin et le développement natif d’applications Android, iOS et Windows en C#
A la découverte du Responsive Web Design par Mathieu Parisot - Soat
MongoDB : la base NoSQL qui réinvente la gestion de données

Introduction à scala

  • 1. Introduction à Scala Introduction à Scala par Ludwine et Florent
  • 2. Florent Lagrède développeur Java chez voyages-sncf.com @flowlag Ludwine Probst développeuse Java chez voyages-sncf.com DuchessFr et GDG member @nivdul
  • 3. Plan de la soirée Introduction à Scala... Partie 1 Généralités Partie 2 Présentation des concepts Partie 3 Démonstration avec une appli
  • 4. Histoire Nom : scala vient de "scalable langage" Auteur: Martin Odersky Création : 2003 Lieu : EPFL (Lausanne) But : être élégant et concis, mais pas que...
  • 5. Dans la communauté PSUG (Paris Scala User Group) • soirée chaque mois avec 60-100 membres • sujets techniques, retours d'expériences, présentations de projets open-source...
  • 6. Scala en quelques mots • langage mélangeant programmation orientée- objet et fonctionnelle • tourne sur la JVM • compatible avec les librairies Java • statiquement typé • soucis de la concurrence (immutable) • inférence de type • tout est objet (hiérarchie des classes) • et ça se veut être concis
  • 7. // en Java class Album { private int id; private String name; public Album(int id, String name) { this.id = id; this.name = name; } } // en Scala class Album(id: Int, name: String)
  • 8. La programmation fonctionnelle • exprime les fonctions au sens mathématique • exclut le changement d'état lors de l'évaluation de fonctions • élimine les effets de bords • s'oppose à la programmation impérative
  • 9. Scala dans le milieu professionnel
  • 10. Quelques outils pour coder en Scala • REPL (Read-Evaluate-Print Loop) • sbt (simple-build-tool) • éditeur de texte (sublimtext,notepad++...) • Eclipse/IntelliJ http://typesafe.com/stack/downloads/scala-ide • scaladoc http://www.scala-lang.org/
  • 11. Démo • création d'un projet scala via Eclipse • utilisation du worksheet • petits tests en scala via le REPL • compilation/exécution (tests) d'un projet via sbt
  • 12. Objectifs de la soirée • présenter les bases, du moins certaines o mutable/immutable, trait, case class, sealed, List, high order function, pattern matching... o voir la syntaxe • regarder de près une appli en Scala
  • 14. Introduction à Scala par Ludwine et Florent
  • 15. Les classes Définition : • définition standard • pas de mot clé public • un fichier source peut contenir plusieurs classes et elles sont toutes par défaut public
  • 16. Les case classes Définition : • objet non modifiable après instanciation • méthodes equals, toString, hashcode... implicitées • constructeur implicité • pas de new • peut se décomposer avec la notion de Pattern Matching
  • 17. Exemples case class Album(id:Int, name:String) Ces 3 écritures suivantes sont équivalentes : val album = new Album(3, "Paris") val album = Album(3, "Paris") val album = Album.apply(3, "Paris") album.name = qu'obtient-on???
  • 18. Les getters/setters (1/2) //Java public class Image() { private String name; public String getName() {...} public void setName(String name) {...} } //Scala class Image(var name:String)
  • 19. Les getters/setters (2/2) En scala, • les getters/setters sont générés pour la JVM • on peut les surcharger • ils sont privés si l'attribut est privé • il est possible d'empêcher leur génération avec la syntaxe suivante private[this] name:String
  • 20. Val & Var Définition : • val o déclaration d'attribut : variable non modifiable o déclaration de paramètre de classe : getter implicite • var o déclaration d'attribut : variable modifiable o déclaration de paramètre de classe : getter et setter implicite
  • 21. Exemples class Image(var name: String) val imageA = new Image("MyImageA") val imageB = new Image("MyImageB") Si on écrit ça : imageA = imageB Que se passe-t-il ?
  • 22. Les traits Définition : c'est comme une class sauf qu'il y a le mot-clé trait. C'est l'équivalent de l'interface en Java sauf qu'on peut y implémenter des méthodes. trait ImageInfos { val image:Image def ImageInfos:String = image.name }
  • 23. Exemples Possibilité d'un héritage multiple : trait ComputeAverageScore trait AnotherOne class Image extends ImageInfos with ComputeAverageScore with AnotherOne { val name = "Paris" } Pas de paramètres de 'classe' : trait ImageInfos(image: Image) // ne compile pas
  • 24. Les Collections • Utilise le trait Iterable • Immutable par défaut • Fonctions d'ordre supérieure o map o filter o foreach Exemples de collection : List, Map, Set, Vector...
  • 25. Les Lists Définition : La classe List repose sur les deux case classes : • Nil représente une liste vide • :: (se prononce “cons”), où x::xs représente la liste dont le premier élément est x, suivi du reste des éléments xs.
  • 26. Les Lists Les 3 fonctions clé à retenir : • head : renvoie le premier élément d’une liste • tail : renvoie la liste excepté son premier élément • isEmpty : renvoie true si la liste est vide, false sinon
  • 27. Quelques exemples... val scores = List(1,2,3)val names = List(“a”,“b”, “b”) val list = List(List(1,0),List(1,1),List(0,1)) val empty: List[Nothing] = List( ) val scores = 1 :: 2 :: 3 :: Nil val names = “a” :: (“b” :: (“b” :: Nil))
  • 28. Fonction partielle Définition : • une fonction partielle qui s'exécute ou non en fonction de ses paramètres • elle doit obligatoirement définir 2 méthodes o isDefinedAt (condition d'exécution) o Apply (code exécuté)
  • 29. Fonction partiellement appliquée Définition : • fonction à laquelle on n'applique pas tous les arguments, créant ainsi une autre fonction. • peut appliquer aucun ou tous les arguments d'une fonction
  • 30. Les fonctions de plus haut niveau • Expression lambda o x: Int => x + 1 est équivalent à f(x: Int) = {x + 1} • Peut prendre une autre fonction en paramètre • Peut être retournée en tant que résultat • Peut être déclarée à l'intérieur d'une autre fonction • Peut-être stockée dans une variable Exemples : map, filter, flatten, flatmap...
  • 31. Les options (1/2) Définition : Le type Option désigne une valeur optionnelle et c'est une Collection.
  • 32. Les options (2/2) L'intérêt des Options ? Imaginons que l’on veuille trouver une personne dans une BDD... def findImage(id: Int): Option[Image]
  • 33. Pattern Matching Définition : Le pattern matching peut être assimilé au switch case d'autres langages comme Java. e match {case p1 => e1 ... case pn => en } pi représente les patterns et ei la valeur renvoyée dans le cas où le pattern pi match e. Erreur MatchError renvoyée si besoin.
  • 34. Exemples (1/4) def applyEvent(event: Event) = event match { case AddImage(image) => add(image) case RemoveImage(withId) => remove(withId) case SearchImages(term) => search(term) case _ => this.image } C'est quoi ce "_" ?
  • 35. Exemples (2/4) Avec les options : case SortImages(criteria) => criteria match { case Some(criteria) => sort(criteria) case None => this.images }
  • 36. Exemples (3/4) On peut faire du Pattern Matching sur un peu tout ! def describe(x: Any) = x match { case 5 => "five" case true => "truth" case "hello" => "hi!" case Nil => "the empty list" case _ => "something else" }
  • 37. Exemples (4/4) Avec les listes : def eval(list:List[Int]) = list match { case Nil => println("vide") case x::Nil => println("un seul élément") case x::xs => println("au moins 2 élemts") }
  • 38. Sealed Trait Définition : le mot-clé sealed devant un trait : ça facilite le Pattern Matching ! Exemple : sealed trait Criteria case class ByName extends Criteria case class ByDate extends Criteria
  • 39. Présentation de l'application • moteur de recherche d'image • le modèle : Image, Album • technos : scala 2.10
  • 40. Quelques liens Programming in Scala Scala in Depth Scala for the impatient Pour apprendre scala par la pratique : https://www.coursera.org/