Damien Lecan
- Architecte Java & Co. Web
- Développeur depuis 1998
Concentré de Scala
Notions générales
- POO
- Programmation fonctionnelle
- Intéropérable avec Java (ou .Net)
- Compilé en Bytecode Java
- Exécuté sur la JVM
object TerrainDeJeu extends App {
val list = List("cette", "conférence", "est", "géniale")
list.foreach {
mot =>
println(mot)
}
list foreach println _
var longueurs = list map (mot => (mot, mot.length))
println("La longueur de chaque mot est : " + longueurs)
}
Concision
- Java
public class Personne {
private String nom;
public Personne(String nom) {
this.nom = nom;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
}
- Scala
class Personne(var nom: String)
Immutabilité
val s1 = "a"
s1 = "a" // Erreur de compilation
var s2 = "b"
s2 = "b" // Ok
Immutabilité
val mut = ListBuffer(1) // s.collection.mutable.ListBuffer[Int]
// id : ab853b
val modMut = mut += 2 // id : ab853b
Immutabilité
val immut = List(1) // s.collection.immutable.List[Int]
// id : d70d7a
val modImmu = immut :+ 2 // id : b5f53a
Immutabilité
- Façon de programmer à adapter
- Objets créés plus nombreux
- Code thread-safe "naturellement"
Fonctions à tous les étages
val list = List("Cette", "conférence", "est", "toujours", "aussi", "géniale")
//> List[String] = List(Cette, conférence, est, toujours, aussi, géniale)
list filter (word => word.contains("e"))
//> List[String] = List(Cette, conférence, est, géniale)
val byE = (word: String) => word.contains("e")
//> byE : String => Boolean = <function1>
list filter byE
//> List[String] = List(Cette, conférence, est, géniale)
Et plus
- Système de type unifié : tout est objet (types primitifs, tableaux)
- Création simplifiée de DSL car syntaxe flexible
- Extraordinaire API de collections, très riche
- Exceptions non vérifiées uniquement
- Paramètres optionnels ou nommés
- Variables ou classes implicites
- Evaluation différée (lazy)
- Trait = interface + code
- Surcharge d'opérateur
- String multi-lignes
- Pattern matching
- Singleton
- Tuples
- ...
Editeur de texte
Eclipse Scala IDE
IntelliJ
Middleware haute performances
Tests
Encore
Compatibilité binaire
Une bibliothèque compilée avec une version particulière de Scala ne fonctionnera pas nécessairement avec une version plus récente ou plus ancienne.
Temps de compilation
- Le compilateur fait beaucoup de travail
ça se paie !
- Modulariser
- Configurer la compilation incrémentale via SBT (ou Maven / Gradle)
Faire n'importe quoi
s(7) <*> (s(8) <*> (s(9) ∘ add3)) assert_=== s(24)
f("bzzt") <*> (s(8) <*> (f("bang") ∘ add3)) assert_=== ff(List("bang", "bzzt"))
w.toLowerCase.groupBy(char => char).toList.sortBy {
case (char, word) => char
}.map {
case (char, word) => (char, word.length)
}
...
Worksheet
Bien démarrer
- Suivre la formation Scala sur Coursera
- Utiliser un IDE
- Hiérarchiser les fonctionnalités de Scala
- Les introduire progressivement dans son code
- Limiter les dépendances externes
-
Je suis trop vieux pour ces co***ries !
Ouverture d'esprit