Premiers pas avec Scala

[Edit]
Pour ceux qui sont arrivés sur cette page et qui débutent avec la programmation fonctionnelle, je vous conseille d'aller lire rapidement mon article à ce sujet pour trouver les donnes ressources pour apprendre toutes les bases et principes nécessaires par la suite.

Le crédo de tout bon développeur est de rester attentif aux nouveaux langages ou outils faisant leur apparition et pouvant lui permettre d'améliorer son travail. C'est la raison pour laquelle j'ai décidé de me lancer dans l'apprentissage du langage Scala...

Pourquoi celui-ci en particulier? Tout simplement car il est le plus proche de Java, au point qu'il est prévu pour s'exécuter dans une JVM et que son bytecode est compatible avec celui de Java (autrement dit, les deux langages peuvent s'interfacer!).

L'intérêt principal de Scala est qu'il est beaucoup moins verbeux que Java et comble certaines lourdeurs de syntaxe, comme par exemple :

// En Java
for(int i=0; i<10; i++){
  System.out.println(i);
}

// En Scala
for(i<-List.range(0,10)) println(i)

ou encore :

// En Java
public static String returnStr(Object data) {
  String result = "";
  if(data!=null){
    result = data.toString();
  }
  return result;
}

// En Scala
def returnStr(data:Object) = if(data!=null) data.toString else ""

Ceci n'est qu'un banal exemple, mais il est certain que Scala offre beaucoup d'avantages à l'usage, notamment grâce au fait que le compileur déduit de lui-même beaucoup de choses quant aux types des variables utilisées : dans le dernier exemple ci-dessus, on voit qu'aucun type de donnée de retour n'est spécifié pour la méthode returnStr et pourtant un code comme celui-ci ne compilera pas :

// Scala
var test:Int = returnStr(data)

Alors bien sûr les puristes de Java comme moi pourront s'exclamer devant ce genre de "laxisme" en terme de rigueur syntaxique, mais il est indéniable que cela permet de gagner en productivité et en légèreté lors de l'écriture du code. Scala a en effet l'avantage de s'appuyer sur l'expérience de Java afin de proposer une syntaxe plus concise et directive en ajoutant l'aspect fonctionnel à la programmation purement objet.

Quel IDE pour commencer?

Le première chose compliquée pour se lancer avec Scala est de trouver le bon IDE. En faisant quelques recherches, on se rend vite compte que le débat est assez important entre Eclipse, Netbeans et IDEA. Pour avoir testé les 3, je recommande vivement Netbeans : le principal défaut du plugin Scala pour Eclipse (Galiléo) est son instabilité... Il n'est pas rare qu'il fige littéralement l'IDE après une recherche d'occurrences ou d'expression. Qui plus est, l'auto-complétion n'est vraiment pas au point. Concernant IDEA, je n'est même pas réussi à installer le plugin! (Problèmes de dépendances à la chaîne...)

Finalement, et même s'il n'est pas encore totalement au point, le plugin Netbeans est largement au dessus des autres : auto-completion satisfaisante, stabilité parfaite. Son seul défaut est la lenteur de compilation : entre 2 et 5 secondes pour 2 classes (environ 100 lignes au total...). Pour l'installer, je vous conseille de suivre cette démarche.

Couplage avec Java

Comme je l'ai dit plus haut, Scala est totalement interfaçable avec Java. Il est donc possible d'utiliser des classes Java dans du code Scala (et c'est même parfois nécessaire).

L'exemple le plus parlant est le support de Swing dans Scala. La plupart des objets courants du package javax.swing.* sont disponibles dans le package scala.swing.*. Ainsi, il est possible d'utiliser par exemple scala.swing.Table et d'obtenir son homologue Java (JTable) par l'intermédiaire de la simple propriété scala.swing.Table.peer.

Je ne fais ici qu'une rapide présentation du langage en lui-même, mais je ne manquerai pas de publier des analyses plus approfondies lorsque j'aurai moi même fais le tour de tout ce que Scala peut apporter à un développeur Java. J'ai listé ci-dessous la documentation la plus pertinente que j'ai parcouru pour le moment. Je vous conseille de lire rapidement les détails sur le site officiel afin de prendre connaissance de l'ampleur des nouveautés disponibles!

Sources


Fichier(s) joint(s) :

2 commentaires:

Olivier Croisier a dit…

Je trouve que la comparaison sur la longueur des expressions est un peu malhonnête, car vous auriez pu utiliser des formes raccourcies :

for(int i=0; i<10; i++) System.out.println(i);

public static String returnStr(Object data) {
return data==null ? "" : data.toString();
}

On s'aperçoit alors que la longueur des codes entre Java et Scala est à peu près identique...

(Autre remarque en passant : pour la boucle 'for', le fait que la borne supérieure soit exclue du compte est explicite en Java grâce à l'opérateur < , mais implicite avec la méthode range() de Scala. Ici, Java marque un point de lisibilité.)

A mon avis, les points forts de Scala sont ailleurs, par exemple dans le fait que les fonctions soient des composants du langage à part entière.

Paul-Emmanuel Faidherbe a dit…

En effet les littéraux de Java permettent d'économiser pas mal de code.
Mais il y a d'autres choses que Scala inclue implicitement dans sa syntaxe : pour reprendre l'exemple que vous citez, les modifiers "public static" sont implicites et sont par définis par défaut. De la même façon, une méthode qui déclare un type de retour autre que "Unit" (le "void" de Java) n'aura pas besoin d'utiliser le mot clé "return".
Mais j'ai peut-être été un peu rapide dans ma description en effet! :)
Et je suis d'accord avec vous concernant la lisibilité de Java. C'est un peu le même genre de reproche que l'on peut faire à Groovy...
Pour terminé, comme je l'ai indiqué à la fin de mon article, je n'en suis qu'aux prémices de mes découvertes, je ne manquerai pas de compléter mes analyses! :)