Je suis totalement dans Scala en tant que langage ... et je continue de me demander pourquoi une entreprise devrait passer de Java à Scala. Scala est-il juste du sucre syntaxique sur la JVM ou y a-t-il des améliorations fondamentales dans Scala sur Java qui amélioreraient les applications du monde réel?
16
Réponses:
Avertissement: je ne suis pas un gourou de Scala.
Scala fait extrêmement bien deux choses que Java (actuellement) ne fait pas.
Résoudre les 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)
Mais écrivez plutôt quelque chose comme:
Résolvez la concurrence d'une manière plus sûre
Je ne peux honnêtement pas penser à autre chose qui fait que Scala se tient 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
la source
Cela dépend de votre définition de "sucre syntaxique". Par exemple, en quoi 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 ajoute quelque chose appelé des fermetures, ce ne sera pas le cas - ce ne seront que des fonctions anonymes.
Quant à la détection de plus d'erreurs, 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.
la source
En plus de la réponse de Martijn, je voudrais ajouter que Scala est plus expressif que Java et les avantages sont que (1) il vous rend plus productif (2) écrire 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 IMHO est un mythe).
la source
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, chaque littérature sur Scala semble mentionner la même chose passe- partout . Si ce que vous cherchez est de réduire le passe- partout, 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.
ou utiliser des fermetures comme ça
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 accompagnée de + ve et -ve.
la source
liste de compréhension, pour la compréhension.
par exemple en java vous écrivez:
En scala, le même code est écrit de façon beaucoup plus élégante (comme python) que:
Et.. Voila.
Scala offre tellement de choses que Java ne propose pas. Il n'y a tout simplement aucune comparaison. Le seul problème est que les gens sont plus familiers avec Java (b / c c'est ce qu'ils enseignent dans les classes CS) et pas aussi compétents avec le paradigme Scala.
Scala a une récursivité de queue, il peut retourner des tuples (quelque chose qui pourrait arriver dans Java 8 je pense).
Ce n'est pas une comparaison. Scala a été développé par Martin Ordersky, qui a travaillé sur l'équipe principale de Java Generics.
Scala est juste une langue bien supérieure. C'est tout ce qu'on peut en dire. Les gens qui disent le contraire n'ont tout simplement pas suffisamment exploré Scala pour en savoir plus.
Ci-dessus, je voulais dire l'optimisation de la récursivité de la queue (ce que la JVM ne peut pas faire comme le compilateur de Scala peut).
Scala compile et s'exécute également plus rapidement que les applications JVM (Oui, c'est vrai). Sans parler des cadres. Nous utilisons Tomcat par exemple et déployons quelques servelets pour gérer REST.
Une chose que Tomcat ne peut pas faire, ce sont les opérations asynchrones qui nécessitent des E / S non bloquantes. Pour cela, les développeurs JAVA ont généralement inventé une solution de contournement à l'aide d'une file d'attente de messages (envoyez le message à la file d'attente, et un autre processus ou thread le récupère et fait ce que vous voulez en arrière-plan).
Malheureusement, cette méthode est cr * p, et un hack sur les limitations du déploiement des servlets Java sur Tomcat.
Allez voir akka + spray. Il utilise les acteurs de scala (les acteurs sont comme les threads, sauf que la seule façon de communiquer est par le biais de messages).
Et maintenant, les appels REST asynchrones sont faciles. Tâche d'arrière-plan de longue durée? Aucun problème. Il suffit de tirer et d'oublier, et de faire des sondages REST pour vérifier son état depuis le front-end de temps en temps.
Si vous utilisez toujours Java et pensez que c'est mieux que scala, vous pourriez tout aussi bien cesser d'utiliser votre ordinateur pour taper et revenir à l'époque des plumes d'oie et de l'écriture aux chandelles. Java est fondamentalement antédiluvien par rapport à Scala.
la source
int myVar = condition ? someValue : otherValue
//some value
//other value
commentaires pour en faire des commentaires/*some value*/
ou quelque chose. Il perturbe actuellement votre mise en évidence de la syntaxe: p