Scala c’est beau et ca fait du bien !
Comme disait un ancien collègue : « quand il n’y a pas de code, il n’y a pas de bug ». Avec Scala justement, on écrit bien moins de code qu’en Java, et donc j’imagine moins de bugs. Quelques rapides exemples pour illustrer le propos d’un développeur Java charmé par ce langage :
Concision
Voici comment déclarer une classe avec deux attributs immutables et des contraintes sur ceux ci :
class GrassField(val width: Int, val height: Int) { require(width > 0 && height > 0, "Width and Height must be postive integers") override def toString = "Field(" + width + "," + height + ")"; }
Lire la première ligne d’un fichier, extraire deux entiers puis itérer sur le reste 2 lignes par 2 lignes :
val lines = Source.fromFile(file).getLines().toTraversable val fieldDimensions = lines.head.split(' ') map (_.toInt) val field = new GrassField(fieldDimensions(0),fieldDimensions(1)) lines.tail.toIterator.sliding(2, 2).foreach {...}
Pattern Matching
Processing d’une chaine de caractère lettre par lettre :
seq.toCharArray.foreach { _ match { case 'A' => {...} case 'G' => {...} case 'D' => {...} case _ => throw new IllegalArgumentException("Invalid instruction, must be either 'A', 'G', 'D'") }
Acteurs
Pour parallèliser l’éxécution d’une méthode sur chacun des éléments d’une liste :
val caller = self listToProcess foreach (i => { actor { caller ! longComputationMethod(i) } }) val results = ("" /: (0 until listToProcess.length)) { (partialResult, i) => receive { case r:String => { partialResult + ", " + i } } }
Conclusion
Ca fait drôle au début mais plus on code avec Scala plus on a envie de coder : au début c’est un peu difficile, mais après cela s’avère être un bon stimulant neuronal. Ce très rapide billet est un aperçu des fonctionnalités du langage. Je reviendrai dessus à mesure que je descendrai dans du code plus élaboré dans un prochain article. En attendant je vous conseille l’excellent PDF ‘Scala For the Impatient‘ de Cay Horstmann distribué gracieusement par TypeSafe.