Download - Introduction à scala

Transcript
Page 1: Introduction à scala

Introduction à Scala

Introduction à Scala par Ludwine et Florent

Page 2: Introduction à scala

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

Page 3: Introduction à scala

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

Page 4: Introduction à scala

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...

Page 5: Introduction à scala

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...

Page 6: Introduction à scala

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

Page 7: Introduction à scala

// 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)

Page 8: Introduction à scala

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

Page 9: Introduction à scala

Scala dans le milieu professionnel

Page 10: Introduction à scala

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/

Page 11: Introduction à scala

• 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

Démo

Page 12: Introduction à scala

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

Page 13: Introduction à scala

Présentation de concepts clés

Page 14: Introduction à scala

Introduction à Scala par Ludwine et Florent

Page 15: Introduction à scala

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

Page 16: Introduction à scala

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

Page 17: Introduction à scala

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???

Exemples

Page 18: Introduction à scala

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)

Page 19: Introduction à scala

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

Page 20: Introduction à scala

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

Page 21: Introduction à scala

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 ?

Exemples

Page 22: Introduction à scala

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

}

Page 23: Introduction à scala

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

Exemples

Page 24: Introduction à scala

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...

Page 25: Introduction à scala

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.

Page 26: Introduction à scala

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

Page 27: Introduction à scala

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))

Page 28: Introduction à scala

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é)

Page 29: Introduction à scala

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

Page 30: Introduction à scala

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...

Page 31: Introduction à scala

Les options (1/2)

Définition :

Le type Option désigne une valeur optionnelle et c'est une Collection.

Page 32: Introduction à scala

L'intérêt des Options ?

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

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

Les options (2/2)

Page 33: Introduction à scala

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.

Page 34: Introduction à scala

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 (1/4)

Page 35: Introduction à scala

Avec les options : case SortImages(criteria) => criteria match {

case Some(criteria) => sort(criteria)

case None => this.images

}

Exemples (2/4)

Page 36: Introduction à scala

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 (3/4)

Page 37: Introduction à scala

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")

}

Exemples (4/4)

Page 38: Introduction à scala

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

Page 39: Introduction à scala

Présentation de l'application

• moteur de recherche d'image

• le modèle : Image, Album

• technos : scala 2.10

Page 40: Introduction à scala

Quelques liens

Programming in Scala

Scala in Depth

Scala for the impatient

Pour apprendre scala par la pratique :

https://www.coursera.org/

Page 41: Introduction à scala
Page 42: Introduction à scala

Merci !