Estoy totalmente interesado en Scala como lenguaje ... y todavía me cuesta entender por qué cualquier compañía debería cambiar de Java a Scala. ¿Scala es solo azúcar sintáctico sobre la JVM o hay mejoras fundamentales en Scala sobre Java que mejorarían las aplicaciones del mundo real?
16
Respuestas:
Descargo de responsabilidad: no soy un gurú de Scala.
Scala hace dos cosas extremadamente bien que Java (actualmente) no hace.
Resolver problemas funcionales
En el nivel más básico, Scala tiene cierres completos con soporte de colecciones. Esto significa que ya no tiene que escribir el código de la placa de la caldera como (descaradamente arrancado de una publicación de DZone)
Pero en cambio escribe algo como:
Resolver concurrencia de una manera más segura
Honestamente, no puedo pensar en mucho más que haga que Scala se destaque por encima de Java. Muchas pequeñas mejoras y mejoras, sí, pero también mucha más cuerda para ahorcarse. YMMV
HTH un poco
fuente
Eso depende de su definición de "solo azúcar sintáctico". Por ejemplo, ¿de qué manera Java es más que solo azúcar sintáctico sobre código de máquina?
Cualquier idioma puede hacer menos que el código de máquina, pero ningún idioma puede hacer más.
Lo que los lenguajes de alto nivel aportan a la tabla es hacer que el código sea más fácil de leer y comprender, más fácil de componer y detectar más errores. Y, en mi opinión, es el primero de estos que hace la mayor diferencia: precisamente "solo el azúcar sintáctico".
Pero considerando solo los otros dos, todavía hay ventajas de Scala sobre Java.
No para diferir el punto, pero tener cierres hace que el código sea mucho más fácil de escribir que no tener cierres. Y aunque Java 7 agregará algo llamado cierres, no serán eso, solo serán funciones anónimas.
En cuanto a la captura de más errores, el manejo superior de la varianza de Scala es prueba suficiente de que lo hace. Además, su énfasis en la inmutabilidad también evita todo tipo de errores: no es que Java no pueda ser inmutable, sino que simplemente no viene con la biblioteca para hacerlo.
fuente
Además de la respuesta de Martijn, me gustaría agregar que Scala es más expresivo que Java y los beneficios son que (1) te hace más productivo (2) escribir menos código para resolver el mismo problema significa que puedes reducir los errores en tu código (en mi humilde opinión el código libre de errores es un mito).
fuente
He estado usando Scala durante aproximadamente 3 meses y todavía no puedo encontrar nada que no pueda hacer en Java. Para mí, literalmente, cada literatura sobre Scala parece mencionar lo mismo repetitivo . Si lo que está buscando es reducir el repetitivo, entonces Scala es para usted, pero en mi humilde opinión, por ejemplo, el ejemplo de filtro dado anteriormente podría resolverse utilizando colecciones de apache
o usar cierres así
Pero, por supuesto, más detallado. Sin embargo, me gusta la inferencia de tipos. A medida que aprenda Scala, se dará cuenta de que esto es probablemente lo que está sucediendo de todos modos bajo el capó. En mi opinión, cada idioma viene con + ve y -ve.
fuente
lista de comprensión, para la comprensión.
por ejemplo en java escribes:
En scala, el mismo código, se escribe mucho más elegantemente (como python) como:
y hecho.
Scala ofrece tanto que Java no. Simplemente no hay comparación en absoluto. El único problema es que las personas están más familiarizadas con Java (b / c, eso es lo que enseñan en las clases de CS) y aún no son tan hábiles con el paradigma Scala.
Scala tiene una recursión de cola, puede devolver tuplas (algo que podría estar llegando en Java 8, creo).
No es una comparación. Scala fue desarrollada por Martin Ordersky, quien trabajó en el equipo central de Java Generics.
Scala es solo un idioma muy superior. Eso es todo al respecto. Las personas que dicen lo contrario simplemente no han explorado Scala lo suficiente como para saberlo mejor.
Arriba, quise decir optimización de recursión de cola (que la JVM no puede hacer como el compilador de Scala).
Scala también compila y ejecuta más rápido que las aplicaciones JVM (Sí, es cierto). Sin mencionar los marcos. Usamos Tomcat, por ejemplo, e implementamos algunos servlets para manejar REST.
Una cosa que Tomcat no puede hacer son las operaciones asincrónicas que requieren E / S sin bloqueo. Para esto, los desarrolladores de JAVA suelen inventar una solución alternativa utilizando una cola de mensajes (envía el mensaje a la cola, y algún otro proceso o hilo lo recoge y hace lo que quieras en segundo plano).
Desafortunadamente, este método es cr * p, y hackea las limitaciones de implementar servlets Java en Tomcat.
Ve a ver akka + spray. Utiliza los actores de scala (los actores son como hilos, excepto que la única forma en que pueden comunicarse es a través de mensajes).
Y hecho, las llamadas REST asincrónicas se hicieron fáciles. Tarea en segundo plano de larga duración? No hay problema. Simplemente dispara y olvida, y realiza algunas encuestas REST para verificar su estado desde el front-end de vez en cuando.
Si todavía usa Java y cree que es mejor que Scala, también puede dejar de usar su computadora para escribir y volver a los días de las plumas y escribir a la luz de las velas. Java es básicamente antediluviano en comparación con Scala.
fuente
int myVar = condition ? someValue : otherValue
//some value
//other value
comentarios para/*some value*/
darle estilo o algo así. Actualmente está arruinando su resaltado de sintaxis: p