java - viaje - ¿Cuáles son los beneficios de Scala?
vuelos a noruega (6)
Además, eche un vistazo a esta publicación de noticias reciente en el sitio de Scala: " Investigación: Programación de estilo y productividad ".
En su artículo, Gilles Dubochet , describe cómo investigó dos aspectos del estilo de programación utilizando el seguimiento del movimiento ocular. Descubrió que, en promedio, es un 30% más rápido comprender algoritmos que usan para comprensión y mapas, como en Scala, en lugar de aquellos con iterativos ciclos while de Java.
Y otra cita clave de la noticia:
Alex McGuire, que escribe proyectos de misión crítica en Scala para empresas de comercialización de energía, dice de Scala: "La concisión significa que puedo ver más de un programa en una pantalla. Puede obtener una visión general mucho mejor. Cuando tengo un modelo matemático para escribir con Java Tengo que tener dos modelos en mi cabeza, el modelo matemático en sí mismo y el segundo un modelo de cómo implementarlo en Java. Con Scala será suficiente un modelo, el matemático. Mucho más productivo ".
Usted leyó el resto de la publicación y otros elementos vinculados allí .
Soy un desarrollador de Java y quiero saber cómo puedo usar Scala en mis programas de Java.
Aquí hay algunas ventajas de usar Scala:
- Una solución funcional a un problema siempre es mejor : esta es mi opinión personal y está abierto a la discordia. La eliminación de la mutación del código de la aplicación permite que la aplicación se ejecute en paralelo entre hosts y núcleos sin interbloqueos.
- Mejor modelo de concurrencia : Scala tiene un modelo Actor que es mejor que el modelo de bloqueos de Java en un hilo.
- Código conciso : el código Scala es más conciso que su primo más detallado, Java.
- Escriba seguridad / tipeo estático : Scala hace una comprobación en tiempo de compilación.
- Coincidencia de patrones : las declaraciones de casos en Scala son muy potentes.
- Herencia : los rasgos mixin son geniales, y definitivamente reducen la repetición del código.
- Lenguaje específico de dominio (DSL) : la sintaxis de Scala permite que un programador escriba un DSL de aspecto natural. Esta habilidad se construyó cuidadosamente en el diseño del lenguaje original. Esta es una característica muy poderosa de Scala. Las pruebas / especificaciones de Scala se basan en esta característica.
No estoy seguro de que pueda usar Scala fácilmente en sus programas Java, como en "llamar a una clase Scala desde una clase Java".
Puedes intentar, siguiendo el artículo " Mezcla de Java y Scala ".
Extractos relevantes:
El problema es que los pasos de compilación de Java y Scala son independientes: no se pueden compilar archivos Java y Scala de una vez.
Si ninguno de sus archivos Java hace referencia a ninguna clase de Scala, primero puede compilar todas sus clases de Java y luego compilar sus clases de Scala.
O bien, si ninguno de sus archivos Scala hace referencia a ninguna clase de Java, puede hacerlo al revés.
Pero si desea que sus clases de Java tengan acceso a sus clases de Scala y también que las clases de Scala tengan acceso a sus clases de Java, eso es un problema.El código de Scala puede llamar directamente al código de Java, pero a veces llamar al código de Scala desde el código de Java es más complicado, ya que la traducción de Scala a bytecode no es tan sencilla como para Java:
a veces, el compilador de Scala agrega caracteres a los símbolos o realiza otros cambios que deben manejarse explícitamente cuando se realiza una llamada desde Java.
Pero una clase Scala puede implementar una interfaz Java, y una instancia de esa clase se puede pasar a un método Java esperando una instancia de la interfaz.
La clase Java llama a los métodos de interfaz en esa instancia exactamente como si fuera una instancia de clase Java.
Lo opuesto es posible, por supuesto, como se describe en Roundup: Scala for Java Refugees , de Daniel Spiewak .
Puedo nombrar algunos puntos extremadamente claros en un lenguaje muy simple de mi experiencia limitada:
Propiedades C ++ y Java tenían esta noción de una "propiedad" de la función getter / setter pública envuelta alrededor de una variable de clase interna que conducía a grandes cantidades de código repetitivo. C # formalizó esto como una función de lenguaje real y redujo gran parte de la repetición en C # 3.0 con propiedades implementadas automáticamente. Las clases de Scala definen propiedades triviales simplemente como vals de lectura regular o vars de lectura / escritura. La clase puede luego elegir reemplazar aquellos con los métodos get o get / set sin afectar el código del cliente. Para esto, Scala proporciona la solución más elegante con las características de lenguaje y complejidad más bajas.
Las matrices usan genéricos regulares. En Java / C #, los genéricos se atornillaron como una idea posterior y están completamente separados, pero tienen un comportamiento superpuesto con las matrices.
Scala tiene un "val" inmutable como característica de idioma de primera clase. En realidad, val es similar a las variables finales de Java: la referencia superior es inmutable, pero los contenidos pueden mutar.
Scala permite si los bloques, los bucles for-yield y el código entre llaves devuelven un valor. Esto es muy elegante en muchas situaciones. Una ventaja muy pequeña es que esto elimina la necesidad de un operador ternario por separado.
Scala tiene objetos singleton en lugar de C ++ / Java / C # class estáticos. Esta es una solución más limpia.
La coincidencia de patrones. Desempaque de objetos. Muy agradable en un gran número de situaciones.
Tuplas nativas
Las colecciones inmutables persistentes son las predeterminadas y están integradas en la biblioteca estándar.
Scala o Java:
Pros:
- Scala admite estilos de programación OO tanto funcionales como imperativos y defiende que ambos modelos no están en conflicto entre sí, pero que son ortogonales y pueden complementarse entre sí. Scala no requiere ni obliga al programador a usar un estilo particular, pero generalmente el estándar es usar un estilo funcional con variables inmutables cuando sea apropiado (hay varias ventajas de usar el enfoque funcional como la sintaxis concisa y corta y el uso de funciones puras generalmente reduce la cantidad de no determinismo y los efectos secundarios del código), mientras recurre a la programación imperativa cuando el código parece más simple o más comprensible.
- Scala no requiere; al final de cada línea que tiene opcional que conduce a un código más limpio
- En las funciones de Scala son cititzens de primera clase
- Scala admite algunas funciones avanzadas que se crean directamente en el lenguaje, como: Currying, Closures, funciones de orden superior, coincidencia de patrones, tipos vinculados superiores, mónadas, params implícitos.
- Scala puede interactuar muy bien con Java y ambos pueden coexistir. Es posible utilizar las bibliotecas de Java directamente dentro del código de Scala invocando las clases de Java desde el código scala.
- Tiene Tuples incorporado en el lenguaje que hace la vida más fácil en varios escenarios
- Admite la sobrecarga del operador
- tiene un Ecosistema rico y algunos proyectos populares de código abierto en Apache se basan en él.
- Código Async y Non-blocking es muy fácil de escribir con Scala Futures
- Scala admite el modelo Actor con Akka, que puede ser altamente eficiente y escalable cuando ejecuta aplicaciones distribuidas en casos de uso empresarial paralelos y de subprocesos múltiples (Aplicar encapsulamiento sin recurrir a bloqueos, Estado de los actores es local y no compartido, los cambios y los datos se propagan a través de mensaje)
- El código tiende a ser más corto si se compara con Java (podría no ser siempre el caso)
Contras:
- La curva de aprendizaje empinada si se compara con Java y otros idiomas, requiere más tiempo, en general, del alumno para comprender todos los conceptos con claridad. Tiene muchas características
- No está tan bien establecido como Java en el mercado ya que fue inventado más tarde, por lo que Java en general es más maduro y más probado en la batalla.
- Scala abre demasiadas puertas. Permite una gran cantidad de sintaxis compleja que, si se usa de forma irresponsable, puede dar lugar a un código que es difícil de entender. Abusar de cosas como la sobrecarga del operador, los parámetros implícitos y otras construcciones puede ser contraproducente y arruinar la legibilidad del código.
- Java también está evolucionando y mejorando con las versiones más nuevas (como con los módulos JDK 9)
Ve a leer la excelente serie de blogs de Daniel Spiewak sobre Scala. Con Scala puedes mantener:
- todas tus bibliotecas de Java
- todas las ventajas de correr en una JVM (ubicuidad, herramientas administrativas, creación de perfiles, recolección de basura, etc.)
Pero puedes escribir el código de Scala:
- más conciso y claro que Java (especialmente con un estilo más funcional , como en la biblioteca de colecciones)
- tiene cierres y funciones como parte del lenguaje
- tiene sobrecarga del operador (desde la perspectiva del uso)
- tiene mixins (es decir, interfaces que contienen implementación)