Papy fait du Scala

Damien Lecan

Pourquoi ?

Sommaire

Concentré de Scala

 

Notions générales

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

Typage statique

Concision

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é

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

Ecosystème

Code

Editeur de texte

Eclipse Scala IDE

IntelliJ

Build

Développement Web

Middleware haute performances

Tests

Tests

Tests

Et

Encore

Pièges,
trucs,
astuces

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

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

$$ Bilan $$

Ouverture d'esprit


Liens

Q / R