Je suis totalement dans Scala en tant que langue ... et je continue de me demander pourquoi une entreprise devrait passer de Java à Scala. Is Scala juste du sucre syntaxique au-dessus de la JVM ou y a-t-il des améliorations fondamentales dans Scala par rapport à Java qui améliorerait les applications du monde réel?
Avertissement: je ne suis pas un Scala gourou.
Scala fait extrêmement bien deux choses que Java (actuellement) ne fait pas.
Résoudre des problèmes fonctionnels
Au niveau le plus élémentaire, Scala a des fermetures à part entière avec le support des collections. Cela signifie que vous n'avez plus à écrire le code de plaque de chaudière tel que (arraché sans vergogne un poste DZone)
public List<Item> bought(User user)
{
List<Item> result = new ArrayList();
for (Item item : currentItems)
{
if (user.bought(item))
{
result.add(item);
}
}
return result;
}
Mais écrivez plutôt quelque chose comme:
def bought(user: User) = items.filter(user bought _)
Résolvez la concurrence d'une manière plus sûre
Honnêtement, je ne peux pas penser à autre chose qui fait Scala se tenir la tête et les épaules au-dessus de Java. Beaucoup de petits gains et améliorations oui, mais aussi beaucoup plus de corde pour vous accrocher. YMMV
HTH un peu
Cela dépend de votre définition de "sucre syntaxique". Par exemple, de quelle manière Java est-il plus qu'un simple sucre syntaxique sur du code machine?
N'importe quelle langue peut faire moins que le code machine, mais aucune langue ne peut faire plus.
Ce que les langages de haut niveau apportent à la table rend le code plus facile à lire et à comprendre, plus facile à composer et à attraper plus d'erreurs. Et, à mon avis, c'est le premier de ceux-ci qui fait le plus de différence - précisément "juste du sucre syntaxique".
Mais en considérant seulement les deux autres, il y a toujours des avantages de Scala par rapport à Java.
Ne pas insister sur le fait, mais avoir des fermetures rend le code beaucoup plus composable que de ne pas avoir de fermetures. Et bien que Java 7 ajoutera quelque chose appelé fermetures, ce ne sera pas cela - ce ne seront que des fonctions anonymes.
En ce qui concerne la détection d'erreurs supplémentaires, la gestion supérieure de la variance de Scala en est la preuve suffisante. De plus, l'accent mis sur l'immuabilité empêche également toutes sortes d'erreurs - ce n'est pas que Java ne peut pas faire immuable, mais il ne vient tout simplement pas avec la bibliothèque pour le faire.
En plus de réponse de Martijn je voudrais ajouter que Scala est plus expressif que Java et les avantages sont que (1) cela vous rend plus productif (2) l'écriture de moins de code pour résoudre le même problème signifie que vous pouvez réduire les bogues dans votre code (le code sans bogue à mon humble avis est un mythe).
J'utilise Scala depuis environ 3 mois maintenant et je ne trouve toujours rien que je ne pourrais pas faire en Java. Pour moi, littéralement toutes les publications sur Scala semble mentionner la même chose passe-partout. Si vous cherchez à réduire passe-partout alors Scala est pour vous mais à mon humble avis, par exemple l'exemple de filtre donné ci-dessus pourrait tout aussi bien être résolu en utilisant des collections Apache
<T> CollectionUtils.filter(Predicate<T>...)
ou utiliser des fermetures comme ça
<T> CollectionUtils.forAllDo(..., Closure<T>)
Mais bien sûr, plus verbeux. J'aime bien l'inférence de type. En apprenant Scala vous vous rendrez compte que c'est probablement ce qui se passe de toute façon sous le capot. À mon avis, chaque langue est livrée avec + ve et -ve.