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/
Merci !

Contenu connexe

Tendances

BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQL
Lilia Sfaxi
 
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
ECAM Brussels Engineering School
 
Stockage de données dans Android : Fichiers
Stockage de données dans Android : FichiersStockage de données dans Android : Fichiers
Stockage de données dans Android : Fichiers
Lilia Sfaxi
 
BigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceBigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-Reduce
Lilia Sfaxi
 
Partie3BI-DW-OLAP2019
Partie3BI-DW-OLAP2019Partie3BI-DW-OLAP2019
Partie3BI-DW-OLAP2019
Aziz Darouichi
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - Spark
Amal Abid
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
ECAM Brussels Engineering School
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
Lilia Sfaxi
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
IbtissameAbbad1
 
TP1 Big Data - MapReduce
TP1 Big Data - MapReduceTP1 Big Data - MapReduce
TP1 Big Data - MapReduce
Amal Abid
 
Intégration des données avec Talend ETL
Intégration des données avec Talend ETLIntégration des données avec Talend ETL
Intégration des données avec Talend ETL
Lilia Sfaxi
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
slimyaich3
 
Présentation Talend Open Studio
Présentation Talend Open StudioPrésentation Talend Open Studio
Présentation Talend Open Studio
horacio lassey
 
Projet BI - 2 - Conception base de données
Projet BI - 2 - Conception base de donnéesProjet BI - 2 - Conception base de données
Projet BI - 2 - Conception base de donnéesJean-Marc Dupont
 
Python.pptx
Python.pptxPython.pptx
Python.pptx
Jaouad Rachek
 
Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)
Alexis Seigneurin
 
Cours : les listes chainées Prof. KHALIFA MANSOURI
Cours : les listes chainées  Prof. KHALIFA MANSOURI Cours : les listes chainées  Prof. KHALIFA MANSOURI
Cours : les listes chainées Prof. KHALIFA MANSOURI
Mansouri Khalifa
 
Exercice 1 java Héritage
Exercice 1 java HéritageExercice 1 java Héritage
Exercice 1 java Héritage
NadaBenLatifa
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
Olivier Le Goaër
 
Chapitre 3 spark
Chapitre 3 sparkChapitre 3 spark
Chapitre 3 spark
Mouna Torjmen
 

Tendances (20)

BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQL
 
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
 
Stockage de données dans Android : Fichiers
Stockage de données dans Android : FichiersStockage de données dans Android : Fichiers
Stockage de données dans Android : Fichiers
 
BigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceBigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-Reduce
 
Partie3BI-DW-OLAP2019
Partie3BI-DW-OLAP2019Partie3BI-DW-OLAP2019
Partie3BI-DW-OLAP2019
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - Spark
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
 
TP1 Big Data - MapReduce
TP1 Big Data - MapReduceTP1 Big Data - MapReduce
TP1 Big Data - MapReduce
 
Intégration des données avec Talend ETL
Intégration des données avec Talend ETLIntégration des données avec Talend ETL
Intégration des données avec Talend ETL
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Présentation Talend Open Studio
Présentation Talend Open StudioPrésentation Talend Open Studio
Présentation Talend Open Studio
 
Projet BI - 2 - Conception base de données
Projet BI - 2 - Conception base de donnéesProjet BI - 2 - Conception base de données
Projet BI - 2 - Conception base de données
 
Python.pptx
Python.pptxPython.pptx
Python.pptx
 
Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)
 
Cours : les listes chainées Prof. KHALIFA MANSOURI
Cours : les listes chainées  Prof. KHALIFA MANSOURI Cours : les listes chainées  Prof. KHALIFA MANSOURI
Cours : les listes chainées Prof. KHALIFA MANSOURI
 
Exercice 1 java Héritage
Exercice 1 java HéritageExercice 1 java Héritage
Exercice 1 java Héritage
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Chapitre 3 spark
Chapitre 3 sparkChapitre 3 spark
Chapitre 3 spark
 

En vedette

Presentation lesson14
Presentation lesson14Presentation lesson14
Presentation lesson14
saaroonaa
 
Le climat a chypre 2
Le climat a chypre 2Le climat a chypre 2
Le climat a chypre 2elenakrafaela
 
Equipment testing presentation
Equipment testing presentationEquipment testing presentation
Equipment testing presentation
JonoGaymaster
 
UNITED STATES - DAMAGE CONTROL TACTICS - CREDIBILITY ISSUES (French)
UNITED STATES - DAMAGE CONTROL TACTICS - CREDIBILITY ISSUES (French)UNITED STATES - DAMAGE CONTROL TACTICS - CREDIBILITY ISSUES (French)
UNITED STATES - DAMAGE CONTROL TACTICS - CREDIBILITY ISSUES (French)VogelDenise
 
I Tnation 2 0 Fr 111001 3
I Tnation 2 0 Fr 111001 3I Tnation 2 0 Fr 111001 3
I Tnation 2 0 Fr 111001 3
louismaerten
 
Forteresse Soroca
 Forteresse  Soroca Forteresse  Soroca
Forteresse SorocaDana Barbie
 
Parc office présentation_rachat_reprise_informatique_telecom_mobilier_brokera...
Parc office présentation_rachat_reprise_informatique_telecom_mobilier_brokera...Parc office présentation_rachat_reprise_informatique_telecom_mobilier_brokera...
Parc office présentation_rachat_reprise_informatique_telecom_mobilier_brokera...
Annonces-ParcOffice
 
title
titletitle
title
mdou68
 
Alstom crée un référentiel de ses actifs informatiques en deux mois avec Simp...
Alstom crée un référentiel de ses actifs informatiques en deux mois avec Simp...Alstom crée un référentiel de ses actifs informatiques en deux mois avec Simp...
Alstom crée un référentiel de ses actifs informatiques en deux mois avec Simp...
Solutions IT et Business
 
BARACK OBAMA- UNDERSTANDING WILLIE LYNCH (French)
BARACK OBAMA- UNDERSTANDING WILLIE LYNCH (French)BARACK OBAMA- UNDERSTANDING WILLIE LYNCH (French)
BARACK OBAMA- UNDERSTANDING WILLIE LYNCH (French)VogelDenise
 
Projet computraining replay
Projet computraining replayProjet computraining replay
Projet computraining replay
mjdelary
 
recette macarons framboise
recette macarons framboiserecette macarons framboise
recette macarons framboise
mjdelary
 
Formation réseaux sociaux – Commerce et Ecommerce
Formation réseaux sociaux – Commerce et EcommerceFormation réseaux sociaux – Commerce et Ecommerce
Formation réseaux sociaux – Commerce et Ecommerce
L'Autre Média - Formation
 
Présentationrestauration de tableaux
Présentationrestauration de tableauxPrésentationrestauration de tableaux
Présentationrestauration de tableauxatelierdesquen
 

En vedette (20)

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

Similaire à Introduction à scala

Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
Université des langages scala
Université des langages   scalaUniversité des langages   scala
Université des langages scala
Fabrice Sznajderman
 
XB-Java.ppt
XB-Java.pptXB-Java.ppt
XB-Java.ppt
RihabBENLAMINE
 
Langage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté ObjetLangage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté ObjetMohammed Jaafar
 
expression lambda
expression lambdaexpression lambda
expression lambda
Mariam Amchayd
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinterRYMAA
 
Classes et Objets.pdf
Classes et Objets.pdfClasses et Objets.pdf
Classes et Objets.pdf
AabidiHafid
 
11-Cours de Géniel Logiciel
11-Cours de Géniel Logiciel11-Cours de Géniel Logiciel
11-Cours de Géniel Logiciel
lauraty3204
 
Les Classe en Java
Les Classe en JavaLes Classe en Java
Les Classe en Java
Wiki Info Systeme
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
Florian Beaufumé
 
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
Didier Plaindoux
 
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
Loic Yon
 
Csharp2 : classes et objets
Csharp2 : classes et objetsCsharp2 : classes et objets
Csharp2 : classes et objets
Abdoulaye Dieng
 
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
Mamadou Oury Ba
 
Java
JavaJava
De Java à .NET
De Java à .NETDe Java à .NET
De Java à .NET
Michel Salib
 
Mix it 2011 - Clojure
Mix it 2011 - ClojureMix it 2011 - Clojure
Mix it 2011 - Clojure
lolopetit
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objets
Abdoulaye Dieng
 
fdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptxfdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptx
TarikElMahtouchi1
 

Similaire à Introduction à scala (20)

Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
Université des langages scala
Université des langages   scalaUniversité des langages   scala
Université des langages scala
 
XB-Java.ppt
XB-Java.pptXB-Java.ppt
XB-Java.ppt
 
Langage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté ObjetLangage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté Objet
 
expression lambda
expression lambdaexpression lambda
expression lambda
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinter
 
Classes et Objets.pdf
Classes et Objets.pdfClasses et Objets.pdf
Classes et Objets.pdf
 
11-Cours de Géniel Logiciel
11-Cours de Géniel Logiciel11-Cours de Géniel Logiciel
11-Cours de Géniel Logiciel
 
Les Classe en Java
Les Classe en JavaLes Classe en Java
Les Classe en Java
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
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
 
Part1
Part1Part1
Part1
 
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
 
Csharp2 : classes et objets
Csharp2 : classes et objetsCsharp2 : classes et objets
Csharp2 : classes et objets
 
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
 
Java
JavaJava
Java
 
De Java à .NET
De Java à .NETDe Java à .NET
De Java à .NET
 
Mix it 2011 - Clojure
Mix it 2011 - ClojureMix it 2011 - Clojure
Mix it 2011 - Clojure
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objets
 
fdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptxfdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptx
 

Plus de SOAT

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

Plus de SOAT (20)

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