SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
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

Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2Amal Abid
 
BigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataBigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataLilia Sfaxi
 
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
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : SparkLilia Sfaxi
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionLilia Sfaxi
 
Chp3 - Modélisation Multidimensionnelle
Chp3 - Modélisation MultidimensionnelleChp3 - Modélisation Multidimensionnelle
Chp3 - Modélisation MultidimensionnelleLilia Sfaxi
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancépierrepo
 
PFE BI - INPT
PFE BI - INPTPFE BI - INPT
PFE BI - INPTriyadadva
 
exercices business intelligence
exercices business intelligence exercices business intelligence
exercices business intelligence Yassine Badri
 
Projet BI - 1 - Analyse des besoins
Projet BI - 1 - Analyse des besoinsProjet BI - 1 - Analyse des besoins
Projet BI - 1 - Analyse des besoinsJean-Marc Dupont
 
Uml: Diagrammes de classes -- Concepts avances --- 27
Uml: Diagrammes de classes -- Concepts avances --- 27Uml: Diagrammes de classes -- Concepts avances --- 27
Uml: Diagrammes de classes -- Concepts avances --- 27megaplanet20
 
Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3Amal Abid
 
Chp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesChp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesLilia Sfaxi
 
Cours Big Data Chap1
Cours Big Data Chap1Cours Big Data Chap1
Cours Big Data Chap1Amal Abid
 
Rapport pfe isi_Big data Analytique
Rapport pfe isi_Big data AnalytiqueRapport pfe isi_Big data Analytique
Rapport pfe isi_Big data AnalytiqueYosra ADDALI
 
Methodes de gestion de projets - introduction au processus unifié
Methodes de gestion de projets - introduction au processus unifiéMethodes de gestion de projets - introduction au processus unifié
Methodes de gestion de projets - introduction au processus unifiéMireille Blay-Fornarino
 
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-ReduceLilia Sfaxi
 
BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQLLilia Sfaxi
 
Big Data, Hadoop & Spark
Big Data, Hadoop & SparkBig Data, Hadoop & Spark
Big Data, Hadoop & SparkAlexia Audevart
 

Tendances (20)

Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2
 
BigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataBigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big Data
 
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
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de Conception
 
Chp3 - Modélisation Multidimensionnelle
Chp3 - Modélisation MultidimensionnelleChp3 - Modélisation Multidimensionnelle
Chp3 - Modélisation Multidimensionnelle
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
PFE BI - INPT
PFE BI - INPTPFE BI - INPT
PFE BI - INPT
 
exercices business intelligence
exercices business intelligence exercices business intelligence
exercices business intelligence
 
Une introduction à Hive
Une introduction à HiveUne introduction à Hive
Une introduction à Hive
 
Projet BI - 1 - Analyse des besoins
Projet BI - 1 - Analyse des besoinsProjet BI - 1 - Analyse des besoins
Projet BI - 1 - Analyse des besoins
 
Uml: Diagrammes de classes -- Concepts avances --- 27
Uml: Diagrammes de classes -- Concepts avances --- 27Uml: Diagrammes de classes -- Concepts avances --- 27
Uml: Diagrammes de classes -- Concepts avances --- 27
 
Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3
 
Chp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesChp3 - Diagramme de Classes
Chp3 - Diagramme de Classes
 
Cours Big Data Chap1
Cours Big Data Chap1Cours Big Data Chap1
Cours Big Data Chap1
 
Rapport pfe isi_Big data Analytique
Rapport pfe isi_Big data AnalytiqueRapport pfe isi_Big data Analytique
Rapport pfe isi_Big data Analytique
 
Methodes de gestion de projets - introduction au processus unifié
Methodes de gestion de projets - introduction au processus unifiéMethodes de gestion de projets - introduction au processus unifié
Methodes de gestion de projets - introduction au processus unifié
 
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
 
BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQL
 
Big Data, Hadoop & Spark
Big Data, Hadoop & SparkBig Data, Hadoop & Spark
Big Data, Hadoop & Spark
 

En vedette

Presentation lesson14
Presentation lesson14Presentation lesson14
Presentation lesson14saaroonaa
 
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 presentationJonoGaymaster
 
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 3louismaerten
 
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
 
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 replaymjdelary
 
recette macarons framboise
recette macarons framboiserecette macarons framboise
recette macarons framboisemjdelary
 
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 EcommerceL'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
 
Langage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté ObjetLangage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté ObjetMohammed Jaafar
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinterRYMAA
 
Classes et Objets.pdf
Classes et Objets.pdfClasses et Objets.pdf
Classes et Objets.pdfAabidiHafid
 
11-Cours de Géniel Logiciel
11-Cours de Géniel Logiciel11-Cours de Géniel Logiciel
11-Cours de Géniel Logiciellauraty3204
 
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
 
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
 
Csharp2 : classes et objets
Csharp2 : classes et objetsCsharp2 : classes et objets
Csharp2 : classes et objetsAbdoulaye 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 5Mamadou Oury Ba
 
Mix it 2011 - Clojure
Mix it 2011 - ClojureMix it 2011 - Clojure
Mix it 2011 - Clojurelolopetit
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objetsAbdoulaye 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.pptxTarikElMahtouchi1
 

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 2018SOAT
 
L'entreprise libérée
L'entreprise libéréeL'entreprise libérée
L'entreprise libéréeSOAT
 
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 entrepriseSOAT
 
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 PRATIQUESSOAT
 
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-DurandSOAT
 
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-DurandSOAT
 
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-DurandSOAT
 
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 ParisotSOAT
 
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 2014SOAT
 
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 2014SOAT
 
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 2014SOAT
 
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 - SoatSOAT
 
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éesSOAT
 

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.