SlideShare a Scribd company logo
1 of 38
Download to read offline
Conception d'Applications
       Interactives :
 Applications Web et JEE
            Séance #5
     Scala / Play! Framework
Langages alternatives pour la JVM
Langages alternatives pour la JVM



                 Java ≠ JVM
● Java : Langage qui compile vers du bytecode
● JVM : Machine virtuelle qui exécute du bytecode
La JVM en tant que plate-forme
● Build once, run everywhere
  ○ Des implémentations de JVM pour la plupart du
    hardware et OS
  ○ Bytecode format pivot indépendant de la plate-forme


● Tendance à s'affranchir de l'OS
  ○ Côté client : navigateur comme plate-forme
  ○ Côté serveur : JVM comme plate-forme
Pourquoi des nouveaux langages
         If all you have is a hammer,
          everything looks like a nail

Java est un très bon langage généraliste, mais
pas la solution ultime
● Scripting ?
● Programmation fonctionnelle ?
● Simplification et réduction du boilerplate ?
Pourquoi des nouveaux langages
sur la JVM
● Le target est le bytecode
  ○ Pas besoin d'implémenter la compilation vers le
    format natif de chaque OS


● Profiter de l'écosystème Java
  ○ Bibliothèques, serveurs, outils...
  ○ Courbe d'adoption moins ardue


● Support pour langages à typage dynamique
  ○ JSR 292, invokedynamic
  ○ Intégrée à la JVM depuis Java 1.7
Quels sont ces langages ?



● Des langages nouveaux :
  ○ Clojure, Groovy, Scala, Ceylon, Kotlin...



● Des implémentations d'autres langages
  ○ JRuby (Ruby), Jython (Python), Rhino (JS), Elastic
    COBOL (Cobol), JGNAT (Ada), Luaj (Lua)...
Jython
Interprète Python écrit en Java, créé en 1997

●   Compilation de code Python en bytecode
●   Héritage de classes Java par des classes Python
●   Scripting de code Python dans un programme Java
●   Utilisation d'objets Java dans du code Python

Très utilisé pour prototypage, scripting et exploration des
classes Java


                http://www.jython.org/
JRuby
Interprète Ruby écrit en Java, créé en 2001

● Equivalente de Jython pout Ruby
● Capable de faire tourner Rails
● Plus rapide que l'implémentation de
  référence
   ○   Option JIT


                http://www.jruby.org/
Groovy
Langage de POO destiné à la plate-forme Java
● Inspiré de Python, Ruby et Smalltalk
● Syntaxe très proche de Java
● Compilé
   ○ soit à la volée dynamiquement
   ○ soit classiquement vers bytecode
● Typages statique et dynamique
● Support natif pour listes, maps, et expressions
  régulières
● Fermetures ou clôtures (closures)
● Surcharge des opérateurs

            http://groovy.codehaus.org/
Ceylon
Nouveau langage pour la JVM par RedHat
● "Java tel qu'ils serait si il avait été développé
  aujourd'hui"
● Typage statique
  ○ Types union et intersection
● Syntaxe régulière
  ○ Sucre syntactique ajouté
● Modulaire
  ○ Dépôt Ceylon Herd


             http://www.ceylon-lang.org/
Scala
Langage de programmation multi-paradigme
  ○ Programmations orientée objet et fonctionnelle


● Typage statique, syntaxe concise
● Compilé vers bytecode
● Intéropérabilité avec le code Java

           http://www.scala-lang.org/
Le développeur multi-lingue
● Environnement JVM en mouvement continu
  ○ Nouveaux langages
  ○ Nouveaux frameworks
  ○ Nouveaux outils


● Ne pas se tenir à jour, ne pas apprendre =
  stagner, régresser.
  ○ Un nouveau langage par an
  ○ Un nouveau framework tous les 3 mois
Introduction à Scala
Scala
Langage de programmation multi-paradigme
  ○ Programmations orientée objet et fonctionnelle


● Typage statique, syntaxe concise
● Compilé vers bytecode
● Intéropérabilité avec le code Java

           http://www.scala-lang.org/
La console REPL
REPL : Read Event Print Loop

● Console intéractive pour l'interprétation de
  Scala
    horacio@horacio-laptop:$ scala
    Welcome to Scala version 2.10.0-RC3 (Java HotSpot(TM)
    Server VM, Java 1.6.0_31).
    Type in expressions to have them evaluated.
    Type :help for more information.

    scala> val revolution : Int = 1789
    revolution: Int = 1789

    scala>
val et var
● var : variables (mutables)
● val : valeurs (constantes, inmutables)

    scala> val revolution : Int = 1789
    revolution: Int = 1789

    scala> revolution = 1917
    <console>:8: error: reassignment to val
           revolution = 1917
                      ^
    scala> var variable : String = "Ma variable"
    variable: String = Ma variable

    scala> variable = "Notre variable"
    variable: String = Notre variable

    scala>
Classes
● Pas besoin de déclarer les attributs privés et
  les getters et setters
   ○ Le constructeur suffit


● Constructeur avec des valeurs par défaut
     scala> case class Employee( name:String="guest", age:
     Int=30, company:String = "DevCode" )
     defined class Employee

     scala> val guest = Employee()
     guest: Employee = Employee(guest,30,DevCode)

     scala> val guestAge = guest.age
     guestAge: Int = 30

     scala>
Classes
● Définition explicite des paramètres lors des appels aux
  méthodes

● Méthode copy pour créer des copies des objets

     scala> case class Employee( name:String="guest", age:
     Int=30, company:String = "DevCode" )
     defined class Employee

     scala> val luke = Employee("Luke", company="LucasArt")
     luke: Employee = Employee(Luke,30,LucasArt)

     scala> val yoda = luke.copy("Yoda", age=800)
     yoda: Employee = Employee(Yoda,800,LucasArt)


     scala>
Collections
● Les listes et les maps sont des types natifs
  ○ Immuables par défaut

● Simplification des génériques Java
  ○ Inférence des types
     scala> val numbers = List(1,2,3)
     numbers: List[Int] = List(1, 2, 3)

     scala>   for (n <- numbers) println("Number "+n)
     Number   1
     Number   2
     Number   3

     scala>
Collections
● Le for est "très Java"
  ○ Façon Scala : Utiliser des fonctions
                             functionName { input =>
                                             body
                                           }




  scala> val numbers = List(1,2,3)
  numbers: List[Int] = List(1, 2, 3)

  scala>   numbers.foreach { n:Int =>   // Enter to continue on the next line
       |   println("Number "+n)
       |   }
  Number   1
  Number   2
  Number   3



  scala>
Collections
● D'autres exemples des fonctions sur des listes
  scala> val reversedList = numbers.reverse
  reversedList: List[Int] = List(3, 2, 1)

  scala> val numbersLessThan3 = numbers.filter { n => n < 3 }
  numbersLessThan3: List[Int] = List(1, 2)

  scala> val oddNumbers = numbers.filterNot { n => n % 2 == 0 }
  oddNumbers: List[Int] = List(1, 3)

  scala> val higherNumbers = numbers.map { n => n + 10 }
  higherNumbers: List[Int] = List(11, 12, 13)

  scala> val sumOfNumbers = numbers.foldLeft(0) { (total,element) =>
     | total + element
     | }
  sumOfNumbers: Int = 6

  scala> val sumOfNumbers = numbers.sum
  sumOfNumbers: Int = 6

  scala> val higherNumbers = numbers.map(_+10)
  higherNumbers: List[Int] = List(11, 12, 13)

  scala>
Comment apprendre
Scala ?
Je ne vais pas passer une heure à vos passer
des slides
● Méthode peu éfficace

Tentons quelque chose de nouveau
● Approche pratique

      Essayons les Scala Koans !

Scala Koans ? Kesaco ?
Koans
Une nouvelle façon d'apprendre un langage
● Des petits cas pratiques
   ○ Sous la forme de suites de tests unitaires
● Chaque cas orienté pour un concept
   ○ Et un ensemble de tests qui ne passent pas
● Objectif : réparer les tests pour qu'ils
  passent
   ○ Et apprendre le langage en passant


Méthode d'apprentissage différente et éfficace !
Scala Koans :
Learn Scala with the Koans
       http://www.scalakoans.org/
Scala Koans

1. Telecharger le .zip sur http://www.scalakoans.org/
2. Extraire tout et exécuter le fichier ./sbt
3. Compiler les tests avec :
   > test:compile
4. Exécuter tous les koans avec :
   > ~test-only org.functionalkoans.forscala.Koans
   ou
   Exécuter un koan en concret :
   > ~test-only org.functionalkoans.forscala.AboutAsserts
5. Ouvrir le fichier source du koan, l'éditer et voir si ça
   passe
C'est l'heure des Scala Koans !
Play! Framework



Play 2.0, a Web framework for a new era
Le projet Play!
Play! est un framework pour
● faire du développement web
● avec une haute productivité
● avec l'état de l'art des technologies web
● sur la JVM
Play! : productivité et plaisir
● Conçu par des développeurs web pour des
    développeurs web
●   Gestion simple, flexible et puissante du protocole HTTP
    ○ Framework web -> HTTP au centre
    ○ Stateless, request-response
●   Facilité de démarrage
    ○ Courbe d'apprentissage douce
●   Rapidité et simplicité : change le code et recharge la
    page !
●   Framework complet, full-stack
Play! : pas un jouet
●   Modèle de programmation HTTP asynchrone
●   Architecture scalable de haute performance
●   Modèle reactive, non bloquant
●   Typage fort
Suivons le web !
    When a web framework starts an architecture fight
          with the web, the framework loses.




● PHP et Ruby on Rails l'ont bien compris
   ○ Si on fait du web, on s'adapte au web !

● Exemples : session, bouton back...

● Play! a une architecture stateless basé sur HTTP
Modifiez, rechargez, c'est fait !



● Devoir redémarrer le serveur après une modif ?
● Redéployer car on a changé un fichier ?

● A nouveau, regardons PHP ou Ruby on Rails
   ○ Si on fait du web, on s'adapte au web !

● Avec Play! il suffit de recharger la page et la modif est
   prise en compte
   ○ Ca, c'est de la productivité !
Play! ne se bat pas contre le web
● Des URL à ralonge avec des paramètres techniques ?
             C'est pas du web, ça !




● Play! utilise HTTP comme protocole, avec sa
   semantique
   ○ il ne cherche pas à faire son meta-protocole au dessus
Le web a évolué




● On est au bord d'une nouvelle évolution :
    ○ Les requêtes asynchrones en temps réel
    ○ Des énormes flux de données
    ○ Les BDD non relationnelles
●   Les frameworks classiques ont du mal à s'adapter
Les limites des frameworks
classiques

● Chaque utilisateur connecté consomme des
  ressources
  ○ Mémoire, threads...


● Modèles basés sur l'attente active
  ○ Synchronisme entre requête et réponse
  ○ On bloque un thread côté serveur

● Les I/O sont bloquantes
Play! utilise un modèle réactif

● Inversion de contrôle
  ○ On agit que lorsqu'on a quelque chose à faire


● Sans perte de contrôle
  ○ Mais on est capable de garder le contrôle

● Iteratee/Enumerator IO
Play! Framework




 Voici une petite démo

More Related Content

What's hot

Vbisigk
VbisigkVbisigk
VbisigkISIG
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummiesMicrosoft
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de donnéesISIG
 
Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEBAbbes Rharrab
 
Développement de plug in sous eclipse
Développement de plug in sous eclipseDéveloppement de plug in sous eclipse
Développement de plug in sous eclipseISIG
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Dr Samir A. ROUABHI
 
Visual studio
Visual studioVisual studio
Visual studioISIG
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6Julien CROUZET
 
Tour d’horizon de scala
Tour d’horizon de scalaTour d’horizon de scala
Tour d’horizon de scalaBenoit Wilcox
 
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !ochafik
 
Présentation (brève) de scala
Présentation (brève) de scalaPrésentation (brève) de scala
Présentation (brève) de scalaclem_simon
 
mis
mismis
misISIG
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
Rouabhi algiers meetup
Rouabhi algiers meetupRouabhi algiers meetup
Rouabhi algiers meetupSamir Rouabhi
 
OSIS 2017 - Scala REX dans Rudder
OSIS 2017 - Scala REX dans Rudder OSIS 2017 - Scala REX dans Rudder
OSIS 2017 - Scala REX dans Rudder RUDDER
 
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearchParis Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearchMourad DACHRAOUI
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de donnéesISIG
 

What's hot (20)

Vbisigk
VbisigkVbisigk
Vbisigk
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummies
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de données
 
JAVA8, créer votre future
JAVA8, créer votre futureJAVA8, créer votre future
JAVA8, créer votre future
 
Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEB
 
Développement de plug in sous eclipse
Développement de plug in sous eclipseDéveloppement de plug in sous eclipse
Développement de plug in sous eclipse
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
Visual studio
Visual studioVisual studio
Visual studio
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6
 
Tour d’horizon de scala
Tour d’horizon de scalaTour d’horizon de scala
Tour d’horizon de scala
 
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !GPGPU facile avec JavaCL, et trivial avec ScalaCL !
GPGPU facile avec JavaCL, et trivial avec ScalaCL !
 
Présentation (brève) de scala
Présentation (brève) de scalaPrésentation (brève) de scala
Présentation (brève) de scala
 
mis
mismis
mis
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
Rouabhi algiers meetup
Rouabhi algiers meetupRouabhi algiers meetup
Rouabhi algiers meetup
 
OSIS 2017 - Scala REX dans Rudder
OSIS 2017 - Scala REX dans Rudder OSIS 2017 - Scala REX dans Rudder
OSIS 2017 - Scala REX dans Rudder
 
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearchParis Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
Paris Scala User Group #43 - Spray (Magnet Pattern) + RxScala / ElasticSearch
 
The Future of Javascript
The Future of JavascriptThe Future of Javascript
The Future of Javascript
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de données
 
La programmation fonctionnelle en javascript / PF
La programmation fonctionnelle en javascript / PFLa programmation fonctionnelle en javascript / PF
La programmation fonctionnelle en javascript / PF
 

Viewers also liked

Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Xavier NOPRE
 
Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)Saeed Zarinfam
 
Play! Framework for JavaEE Developers
Play! Framework for JavaEE DevelopersPlay! Framework for JavaEE Developers
Play! Framework for JavaEE DevelopersTeng Shiu Huang
 
Exercices shell
Exercices shellExercices shell
Exercices shellulratique
 
Choisir scala en entreprise, est ce bien raisonnable ?
Choisir scala en entreprise, est ce bien raisonnable ?Choisir scala en entreprise, est ce bien raisonnable ?
Choisir scala en entreprise, est ce bien raisonnable ?RUDDER
 
Using Play Framework 2 in production
Using Play Framework 2 in productionUsing Play Framework 2 in production
Using Play Framework 2 in productionChristian Papauschek
 
Open Source Software and GitHub
Open Source Software and GitHubOpen Source Software and GitHub
Open Source Software and GitHubSamy Dindane
 
Serveur web sur lindux debian
Serveur web sur lindux debianServeur web sur lindux debian
Serveur web sur lindux debiancharlielefebvre14
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaYevgeniy Brikman
 
Play Framework
Play FrameworkPlay Framework
Play FrameworkArmaklan
 
Formation Play! framework
Formation Play! frameworkFormation Play! framework
Formation Play! frameworkBenoît Simard
 
Le livre numérique (4) : ergonomie et fabrication
Le livre numérique (4) : ergonomie et fabricationLe livre numérique (4) : ergonomie et fabrication
Le livre numérique (4) : ergonomie et fabricationADBS
 

Viewers also liked (20)

Tp switch
Tp switchTp switch
Tp switch
 
Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013
 
Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)
 
Play! Framework for JavaEE Developers
Play! Framework for JavaEE DevelopersPlay! Framework for JavaEE Developers
Play! Framework for JavaEE Developers
 
Exercices shell
Exercices shellExercices shell
Exercices shell
 
Choisir scala en entreprise, est ce bien raisonnable ?
Choisir scala en entreprise, est ce bien raisonnable ?Choisir scala en entreprise, est ce bien raisonnable ?
Choisir scala en entreprise, est ce bien raisonnable ?
 
Using Play Framework 2 in production
Using Play Framework 2 in productionUsing Play Framework 2 in production
Using Play Framework 2 in production
 
Open Source Software and GitHub
Open Source Software and GitHubOpen Source Software and GitHub
Open Source Software and GitHub
 
Serveur web sur lindux debian
Serveur web sur lindux debianServeur web sur lindux debian
Serveur web sur lindux debian
 
Why Play Framework is fast
Why Play Framework is fastWhy Play Framework is fast
Why Play Framework is fast
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala
 
Play Framework
Play FrameworkPlay Framework
Play Framework
 
Formation Play! framework
Formation Play! frameworkFormation Play! framework
Formation Play! framework
 
Cataratas
Cataratas Cataratas
Cataratas
 
Webquest
WebquestWebquest
Webquest
 
Seguridad y redes
Seguridad y redesSeguridad y redes
Seguridad y redes
 
Xxxi Aniversario A
Xxxi Aniversario AXxxi Aniversario A
Xxxi Aniversario A
 
Redes Sociales en la EINA
Redes Sociales en la EINARedes Sociales en la EINA
Redes Sociales en la EINA
 
Le livre numérique (4) : ergonomie et fabrication
Le livre numérique (4) : ergonomie et fabricationLe livre numérique (4) : ergonomie et fabrication
Le livre numérique (4) : ergonomie et fabrication
 
EBE09, la presentación que no usé
EBE09, la presentación que no uséEBE09, la presentación que no usé
EBE09, la presentación que no usé
 

Similar to Enib cours c.a.i. web - séance #5 : scala play! framework

devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdfdevoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdfJean-Michel Doudoux
 
Introduction à Play Framework 2
Introduction à Play Framework 2Introduction à Play Framework 2
Introduction à Play Framework 2Samy Dindane
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introductionsabrine_hamdi
 
Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Jean-Baptiste Vigneron
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) univalence
 
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Jean-Michel Doudoux
 
LLVM, clang & c++
LLVM, clang & c++LLVM, clang & c++
LLVM, clang & c++cppfrug
 
Langage de Programmation.pdf
Langage de Programmation.pdfLangage de Programmation.pdf
Langage de Programmation.pdfAboubacarDiarra10
 
.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?Rui Carvalho
 
Kevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETKevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETMSDEVMTL
 
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
 
Partie1 TypeScript
Partie1 TypeScriptPartie1 TypeScript
Partie1 TypeScriptHabib Ayad
 
Enib cours c.a.i. web - séance #6 : introduction à node js
Enib   cours c.a.i. web - séance #6 : introduction à node jsEnib   cours c.a.i. web - séance #6 : introduction à node js
Enib cours c.a.i. web - séance #6 : introduction à node jsHoracio Gonzalez
 
Poza 2019 11-21-java_oueneston
Poza 2019 11-21-java_ouenestonPoza 2019 11-21-java_oueneston
Poza 2019 11-21-java_ouenestonJozaIT
 
Big Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBig Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBruno Bonnin
 

Similar to Enib cours c.a.i. web - séance #5 : scala play! framework (20)

devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdfdevoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
 
Introduction à Play Framework 2
Introduction à Play Framework 2Introduction à Play Framework 2
Introduction à Play Framework 2
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introduction
 
Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
 
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17Javaday Paris 2022 - Java en 2022 : profiter de Java 17
Javaday Paris 2022 - Java en 2022 : profiter de Java 17
 
Play 2: java et scala
Play 2: java et scalaPlay 2: java et scala
Play 2: java et scala
 
LLVM, clang & c++
LLVM, clang & c++LLVM, clang & c++
LLVM, clang & c++
 
Dynamic Languages
Dynamic LanguagesDynamic Languages
Dynamic Languages
 
Langage de Programmation.pdf
Langage de Programmation.pdfLangage de Programmation.pdf
Langage de Programmation.pdf
 
.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?
 
Nouveautés Java 9-10-11
Nouveautés Java 9-10-11Nouveautés Java 9-10-11
Nouveautés Java 9-10-11
 
Kevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NETKevin Avignon: Roslyn - La plateforme de compilation .NET
Kevin Avignon: Roslyn - La plateforme de compilation .NET
 
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
 
The future of JavaScript
The future of JavaScriptThe future of JavaScript
The future of JavaScript
 
Partie1 TypeScript
Partie1 TypeScriptPartie1 TypeScript
Partie1 TypeScript
 
Enib cours c.a.i. web - séance #6 : introduction à node js
Enib   cours c.a.i. web - séance #6 : introduction à node jsEnib   cours c.a.i. web - séance #6 : introduction à node js
Enib cours c.a.i. web - séance #6 : introduction à node js
 
De Java à .NET
De Java à .NETDe Java à .NET
De Java à .NET
 
Poza 2019 11-21-java_oueneston
Poza 2019 11-21-java_ouenestonPoza 2019 11-21-java_oueneston
Poza 2019 11-21-java_oueneston
 
Big Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBig Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache Zeppelin
 

More from Horacio Gonzalez

Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27
Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27
Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27Horacio Gonzalez
 
But there is no web component for that - Web Components Remote Conference - 2...
But there is no web component for that - Web Components Remote Conference - 2...But there is no web component for that - Web Components Remote Conference - 2...
But there is no web component for that - Web Components Remote Conference - 2...Horacio Gonzalez
 
Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27
 Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27 Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27
Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27Horacio Gonzalez
 
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...Horacio Gonzalez
 
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSHoracio Gonzalez
 
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Horacio Gonzalez
 
Mixing Web Components - Best of Web Paris - 2016 06-09
Mixing Web Components - Best of Web Paris - 2016 06-09Mixing Web Components - Best of Web Paris - 2016 06-09
Mixing Web Components - Best of Web Paris - 2016 06-09Horacio Gonzalez
 
Polymer in the real life - Devoxx France - 2016 04-20
Polymer in the real life - Devoxx France - 2016 04-20Polymer in the real life - Devoxx France - 2016 04-20
Polymer in the real life - Devoxx France - 2016 04-20Horacio Gonzalez
 
Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24
Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24 Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24
Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24 Horacio Gonzalez
 
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScriptENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScriptHoracio Gonzalez
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...Horacio Gonzalez
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...Horacio Gonzalez
 
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQL
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQLENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQL
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQLHoracio Gonzalez
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JSENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JSHoracio Gonzalez
 
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQL
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQLENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQL
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQLHoracio Gonzalez
 
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScriptENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScriptHoracio Gonzalez
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...Horacio Gonzalez
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSHoracio Gonzalez
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...Horacio Gonzalez
 
Beyond Polymer - JUG Summer Camp - 2015-09-18
Beyond Polymer - JUG Summer Camp - 2015-09-18Beyond Polymer - JUG Summer Camp - 2015-09-18
Beyond Polymer - JUG Summer Camp - 2015-09-18Horacio Gonzalez
 

More from Horacio Gonzalez (20)

Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27
Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27
Il n'y a pas que Polymer dans la vie… - RennesJS - 2017-06-27
 
But there is no web component for that - Web Components Remote Conference - 2...
But there is no web component for that - Web Components Remote Conference - 2...But there is no web component for that - Web Components Remote Conference - 2...
But there is no web component for that - Web Components Remote Conference - 2...
 
Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27
 Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27 Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27
Mixité dans le monde des WebComponents - DevFest Toulouse - 2017-09-27
 
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 2/3 - HTML5, CSS3, Twitter B...
 
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2016 2017 - CAI Web S02E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
 
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
 
Mixing Web Components - Best of Web Paris - 2016 06-09
Mixing Web Components - Best of Web Paris - 2016 06-09Mixing Web Components - Best of Web Paris - 2016 06-09
Mixing Web Components - Best of Web Paris - 2016 06-09
 
Polymer in the real life - Devoxx France - 2016 04-20
Polymer in the real life - Devoxx France - 2016 04-20Polymer in the real life - Devoxx France - 2016 04-20
Polymer in the real life - Devoxx France - 2016 04-20
 
Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24
Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24 Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24
Warp10: collect, store and manipulate sensor data - BreizhCamp - 2016 03-24
 
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScriptENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 3/3 - Web Components avec Po...
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
 
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQL
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQLENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQL
ENIB 2015 2016 - CAI Web S02E03 - Forge JS 2/4 - MongoDB and NoSQL
 
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JSENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 1/3 - HTTP, HTML, CSS JS
 
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQL
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQLENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQL
ENIB 2015-2016 - CAI Web - S01E01- MongoDB and NoSQL
 
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScriptENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JSENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 1/3 - HTTP, HTML, CSS, JS
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 3/3 - Web components avec ...
 
Beyond Polymer - JUG Summer Camp - 2015-09-18
Beyond Polymer - JUG Summer Camp - 2015-09-18Beyond Polymer - JUG Summer Camp - 2015-09-18
Beyond Polymer - JUG Summer Camp - 2015-09-18
 

Enib cours c.a.i. web - séance #5 : scala play! framework

  • 1. Conception d'Applications Interactives : Applications Web et JEE Séance #5 Scala / Play! Framework
  • 3. Langages alternatives pour la JVM Java ≠ JVM ● Java : Langage qui compile vers du bytecode ● JVM : Machine virtuelle qui exécute du bytecode
  • 4. La JVM en tant que plate-forme ● Build once, run everywhere ○ Des implémentations de JVM pour la plupart du hardware et OS ○ Bytecode format pivot indépendant de la plate-forme ● Tendance à s'affranchir de l'OS ○ Côté client : navigateur comme plate-forme ○ Côté serveur : JVM comme plate-forme
  • 5. Pourquoi des nouveaux langages If all you have is a hammer, everything looks like a nail Java est un très bon langage généraliste, mais pas la solution ultime ● Scripting ? ● Programmation fonctionnelle ? ● Simplification et réduction du boilerplate ?
  • 6. Pourquoi des nouveaux langages sur la JVM ● Le target est le bytecode ○ Pas besoin d'implémenter la compilation vers le format natif de chaque OS ● Profiter de l'écosystème Java ○ Bibliothèques, serveurs, outils... ○ Courbe d'adoption moins ardue ● Support pour langages à typage dynamique ○ JSR 292, invokedynamic ○ Intégrée à la JVM depuis Java 1.7
  • 7. Quels sont ces langages ? ● Des langages nouveaux : ○ Clojure, Groovy, Scala, Ceylon, Kotlin... ● Des implémentations d'autres langages ○ JRuby (Ruby), Jython (Python), Rhino (JS), Elastic COBOL (Cobol), JGNAT (Ada), Luaj (Lua)...
  • 8. Jython Interprète Python écrit en Java, créé en 1997 ● Compilation de code Python en bytecode ● Héritage de classes Java par des classes Python ● Scripting de code Python dans un programme Java ● Utilisation d'objets Java dans du code Python Très utilisé pour prototypage, scripting et exploration des classes Java http://www.jython.org/
  • 9. JRuby Interprète Ruby écrit en Java, créé en 2001 ● Equivalente de Jython pout Ruby ● Capable de faire tourner Rails ● Plus rapide que l'implémentation de référence ○ Option JIT http://www.jruby.org/
  • 10. Groovy Langage de POO destiné à la plate-forme Java ● Inspiré de Python, Ruby et Smalltalk ● Syntaxe très proche de Java ● Compilé ○ soit à la volée dynamiquement ○ soit classiquement vers bytecode ● Typages statique et dynamique ● Support natif pour listes, maps, et expressions régulières ● Fermetures ou clôtures (closures) ● Surcharge des opérateurs http://groovy.codehaus.org/
  • 11. Ceylon Nouveau langage pour la JVM par RedHat ● "Java tel qu'ils serait si il avait été développé aujourd'hui" ● Typage statique ○ Types union et intersection ● Syntaxe régulière ○ Sucre syntactique ajouté ● Modulaire ○ Dépôt Ceylon Herd http://www.ceylon-lang.org/
  • 12. Scala Langage de programmation multi-paradigme ○ Programmations orientée objet et fonctionnelle ● Typage statique, syntaxe concise ● Compilé vers bytecode ● Intéropérabilité avec le code Java http://www.scala-lang.org/
  • 13. Le développeur multi-lingue ● Environnement JVM en mouvement continu ○ Nouveaux langages ○ Nouveaux frameworks ○ Nouveaux outils ● Ne pas se tenir à jour, ne pas apprendre = stagner, régresser. ○ Un nouveau langage par an ○ Un nouveau framework tous les 3 mois
  • 15. Scala Langage de programmation multi-paradigme ○ Programmations orientée objet et fonctionnelle ● Typage statique, syntaxe concise ● Compilé vers bytecode ● Intéropérabilité avec le code Java http://www.scala-lang.org/
  • 16. La console REPL REPL : Read Event Print Loop ● Console intéractive pour l'interprétation de Scala horacio@horacio-laptop:$ scala Welcome to Scala version 2.10.0-RC3 (Java HotSpot(TM) Server VM, Java 1.6.0_31). Type in expressions to have them evaluated. Type :help for more information. scala> val revolution : Int = 1789 revolution: Int = 1789 scala>
  • 17. val et var ● var : variables (mutables) ● val : valeurs (constantes, inmutables) scala> val revolution : Int = 1789 revolution: Int = 1789 scala> revolution = 1917 <console>:8: error: reassignment to val revolution = 1917 ^ scala> var variable : String = "Ma variable" variable: String = Ma variable scala> variable = "Notre variable" variable: String = Notre variable scala>
  • 18. Classes ● Pas besoin de déclarer les attributs privés et les getters et setters ○ Le constructeur suffit ● Constructeur avec des valeurs par défaut scala> case class Employee( name:String="guest", age: Int=30, company:String = "DevCode" ) defined class Employee scala> val guest = Employee() guest: Employee = Employee(guest,30,DevCode) scala> val guestAge = guest.age guestAge: Int = 30 scala>
  • 19. Classes ● Définition explicite des paramètres lors des appels aux méthodes ● Méthode copy pour créer des copies des objets scala> case class Employee( name:String="guest", age: Int=30, company:String = "DevCode" ) defined class Employee scala> val luke = Employee("Luke", company="LucasArt") luke: Employee = Employee(Luke,30,LucasArt) scala> val yoda = luke.copy("Yoda", age=800) yoda: Employee = Employee(Yoda,800,LucasArt) scala>
  • 20. Collections ● Les listes et les maps sont des types natifs ○ Immuables par défaut ● Simplification des génériques Java ○ Inférence des types scala> val numbers = List(1,2,3) numbers: List[Int] = List(1, 2, 3) scala> for (n <- numbers) println("Number "+n) Number 1 Number 2 Number 3 scala>
  • 21. Collections ● Le for est "très Java" ○ Façon Scala : Utiliser des fonctions functionName { input => body } scala> val numbers = List(1,2,3) numbers: List[Int] = List(1, 2, 3) scala> numbers.foreach { n:Int => // Enter to continue on the next line | println("Number "+n) | } Number 1 Number 2 Number 3 scala>
  • 22. Collections ● D'autres exemples des fonctions sur des listes scala> val reversedList = numbers.reverse reversedList: List[Int] = List(3, 2, 1) scala> val numbersLessThan3 = numbers.filter { n => n < 3 } numbersLessThan3: List[Int] = List(1, 2) scala> val oddNumbers = numbers.filterNot { n => n % 2 == 0 } oddNumbers: List[Int] = List(1, 3) scala> val higherNumbers = numbers.map { n => n + 10 } higherNumbers: List[Int] = List(11, 12, 13) scala> val sumOfNumbers = numbers.foldLeft(0) { (total,element) => | total + element | } sumOfNumbers: Int = 6 scala> val sumOfNumbers = numbers.sum sumOfNumbers: Int = 6 scala> val higherNumbers = numbers.map(_+10) higherNumbers: List[Int] = List(11, 12, 13) scala>
  • 23. Comment apprendre Scala ? Je ne vais pas passer une heure à vos passer des slides ● Méthode peu éfficace Tentons quelque chose de nouveau ● Approche pratique Essayons les Scala Koans ! Scala Koans ? Kesaco ?
  • 24. Koans Une nouvelle façon d'apprendre un langage ● Des petits cas pratiques ○ Sous la forme de suites de tests unitaires ● Chaque cas orienté pour un concept ○ Et un ensemble de tests qui ne passent pas ● Objectif : réparer les tests pour qu'ils passent ○ Et apprendre le langage en passant Méthode d'apprentissage différente et éfficace !
  • 25. Scala Koans : Learn Scala with the Koans http://www.scalakoans.org/
  • 26. Scala Koans 1. Telecharger le .zip sur http://www.scalakoans.org/ 2. Extraire tout et exécuter le fichier ./sbt 3. Compiler les tests avec : > test:compile 4. Exécuter tous les koans avec : > ~test-only org.functionalkoans.forscala.Koans ou Exécuter un koan en concret : > ~test-only org.functionalkoans.forscala.AboutAsserts 5. Ouvrir le fichier source du koan, l'éditer et voir si ça passe
  • 27. C'est l'heure des Scala Koans !
  • 28. Play! Framework Play 2.0, a Web framework for a new era
  • 29. Le projet Play! Play! est un framework pour ● faire du développement web ● avec une haute productivité ● avec l'état de l'art des technologies web ● sur la JVM
  • 30. Play! : productivité et plaisir ● Conçu par des développeurs web pour des développeurs web ● Gestion simple, flexible et puissante du protocole HTTP ○ Framework web -> HTTP au centre ○ Stateless, request-response ● Facilité de démarrage ○ Courbe d'apprentissage douce ● Rapidité et simplicité : change le code et recharge la page ! ● Framework complet, full-stack
  • 31. Play! : pas un jouet ● Modèle de programmation HTTP asynchrone ● Architecture scalable de haute performance ● Modèle reactive, non bloquant ● Typage fort
  • 32. Suivons le web ! When a web framework starts an architecture fight with the web, the framework loses. ● PHP et Ruby on Rails l'ont bien compris ○ Si on fait du web, on s'adapte au web ! ● Exemples : session, bouton back... ● Play! a une architecture stateless basé sur HTTP
  • 33. Modifiez, rechargez, c'est fait ! ● Devoir redémarrer le serveur après une modif ? ● Redéployer car on a changé un fichier ? ● A nouveau, regardons PHP ou Ruby on Rails ○ Si on fait du web, on s'adapte au web ! ● Avec Play! il suffit de recharger la page et la modif est prise en compte ○ Ca, c'est de la productivité !
  • 34. Play! ne se bat pas contre le web ● Des URL à ralonge avec des paramètres techniques ? C'est pas du web, ça ! ● Play! utilise HTTP comme protocole, avec sa semantique ○ il ne cherche pas à faire son meta-protocole au dessus
  • 35. Le web a évolué ● On est au bord d'une nouvelle évolution : ○ Les requêtes asynchrones en temps réel ○ Des énormes flux de données ○ Les BDD non relationnelles ● Les frameworks classiques ont du mal à s'adapter
  • 36. Les limites des frameworks classiques ● Chaque utilisateur connecté consomme des ressources ○ Mémoire, threads... ● Modèles basés sur l'attente active ○ Synchronisme entre requête et réponse ○ On bloque un thread côté serveur ● Les I/O sont bloquantes
  • 37. Play! utilise un modèle réactif ● Inversion de contrôle ○ On agit que lorsqu'on a quelque chose à faire ● Sans perte de contrôle ○ Mais on est capable de garder le contrôle ● Iteratee/Enumerator IO
  • 38. Play! Framework Voici une petite démo