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

Apprentissage supervisé.pdf
Apprentissage supervisé.pdfApprentissage supervisé.pdf
Apprentissage supervisé.pdf
hanamettali
 
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
 
Project Server/PowerBI : Reporting et analyse de données grâce à la Business ...
Project Server/PowerBI : Reporting et analyse de données grâce à la Business ...Project Server/PowerBI : Reporting et analyse de données grâce à la Business ...
Project Server/PowerBI : Reporting et analyse de données grâce à la Business ...
Microsoft Ideas
 
Projet Bi - 3 - Alimentation des données
Projet Bi - 3 - Alimentation des donnéesProjet Bi - 3 - Alimentation des données
Projet Bi - 3 - Alimentation des données
Jean-Marc Dupont
 
Chapitre 3 NP-complétude
Chapitre 3 NP-complétudeChapitre 3 NP-complétude
Chapitre 3 NP-complétude
Sana Aroussi
 
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
Lilia Sfaxi
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
ECAM Brussels Engineering School
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
Abdoulaye Dieng
 
Cours langage c
Cours langage cCours langage c
Cours langage c
coursuniv
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en python
Mariem ZAOUALI
 
Règles d’association
Règles d’associationRègles d’association
Règles d’association
Hassine Hammami
 
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er coursBases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
Hatim CHAHDI
 
Modificateurs d'accès en java
Modificateurs d'accès en javaModificateurs d'accès en java
Modificateurs d'accès en java
Mohamed Bah
 
BigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopBigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans Hadoop
Lilia Sfaxi
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
Lilia Sfaxi
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
ABDESSELAM ARROU
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
Abdoulaye Dieng
 
Réseaux de neurones récurrents et LSTM
Réseaux de neurones récurrents et LSTMRéseaux de neurones récurrents et LSTM
Réseaux de neurones récurrents et LSTM
Jaouad Dabounou
 

Tendances (20)

Apprentissage supervisé.pdf
Apprentissage supervisé.pdfApprentissage supervisé.pdf
Apprentissage supervisé.pdf
 
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
 
Project Server/PowerBI : Reporting et analyse de données grâce à la Business ...
Project Server/PowerBI : Reporting et analyse de données grâce à la Business ...Project Server/PowerBI : Reporting et analyse de données grâce à la Business ...
Project Server/PowerBI : Reporting et analyse de données grâce à la Business ...
 
Projet Bi - 3 - Alimentation des données
Projet Bi - 3 - Alimentation des donnéesProjet Bi - 3 - Alimentation des données
Projet Bi - 3 - Alimentation des données
 
Chapitre 3 NP-complétude
Chapitre 3 NP-complétudeChapitre 3 NP-complétude
Chapitre 3 NP-complétude
 
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
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
 
Cours langage c
Cours langage cCours langage c
Cours langage c
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en python
 
Règles d’association
Règles d’associationRègles d’association
Règles d’association
 
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er coursBases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
 
Modificateurs d'accès en java
Modificateurs d'accès en javaModificateurs d'accès en java
Modificateurs d'accès en java
 
BigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopBigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans Hadoop
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
 
Base des données réparties
Base des données répartiesBase des données réparties
Base des données réparties
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
Réseaux de neurones
Réseaux de neurones Réseaux de neurones
Réseaux de neurones
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Réseaux de neurones récurrents et LSTM
Réseaux de neurones récurrents et LSTMRéseaux de neurones récurrents et LSTM
Réseaux de neurones récurrents et LSTM
 

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.