Scala es un lenguaje de programación desarrollado por Martin Odersky, científico informático y profesor de métodos de programación en École Polytechnique Fédérale de Lausanne en Suiza. El lenguaje fue diseñado para incorporar paradigmas de programación funcional y orientado a objetos. Es un lenguaje de tipado estático fuerte que se esfuerza por proporcionar una gran expresividad y se ejecuta en la JVM (Java Virtual Machine).
En su diseño, Scala proporciona interoperabilidad de lenguaje con Java para permitir que los desarrolladores aprovechen el ecosistema de Java existente. Esto no implica que Scala no tenga un ecosistema rico. Por el contrario, existen muchas herramientas, marcos y bibliotecas para Scala que van desde marcos de procesamiento de big data (como Apache Spark ) hasta marcos de desarrollo web de pila completa (como Play ). Desde el primer lanzamiento público de Scala en 2003, el lenguaje se ha mejorado continuamente y alcanzó en 2022 su tercer lanzamiento importante (Scala 3).
El nuevo Scala 3 revisado
En la versión principal más reciente (Scala 3.x), se realizaron nuevos cambios sustanciales que mejoran y facilitan el trabajo con el lenguaje. Se mejoró su inferencia de tipos y se incluyeron nuevas características como tipos opacos, tipos de intersección y unión, tipos de funciones dependientes, tipos de funciones polimórficas, tipos de coincidencia, enumeraciones y más, solo por nombrar algunas.
Además, también hubo mejoras en la parte del lenguaje orientada a objetos. Solo por mencionar algunas de las nuevas características. Una nueva característica son las clases abiertas. Un problema en la programación orientada a objetos ocurre si se extienden clases que no están diseñadas para extensión. En las clases de Scala 3 que están explícitamente escritas para ser extendidas, se debe usar el modificador suave abierto. Es simple pero ayuda a realizar un seguimiento de qué clases se pueden extender y cuáles no. Otra característica nueva que admite aún más la composición sobre la herencia es la función de cláusula de exportación . Las cláusulas de exportación definen alias para los miembros de un objeto para facilitar la composición.
La última actualización de Scala 3 incluye nuevas y potentes herramientas para la metaprogramación. Especialmente, la nueva función en línea optimiza el rendimiento.
Después de saltar directamente a las nuevas funciones y echar un vistazo a los cambios en Scala 3, regresemos al principio y presentemos Scala 3.
De vuelta a las raíces: ‘¡Hola Mundo!’
Primero para instalar Scala, siga las instrucciones de instalación en la sección de inicio de Scala .
En Scala 3, un programa Hello World se puede escribir como:

Descompongamos el fragmento de código para obtener una mejor comprensión. La palabra clave def define una función. En nuestro caso específico, el nombre de la función es hola y no contiene parámetros. Después de los paréntesis de cierre de los parámetros, se utiliza una notación abreviada. Normalmente,

requeriría corchetes después del signo igual, pero puede omitirlos si solo tiene una expresión (que es la llamada println(…)). El último comando println(…) imprime hola mundo después de llamar a la función hola(). Nuevo en Scala 3 es el @main que ayuda a identificar qué función es la función principal. En Scala 2, este fragmento de hello world era más detallado y se necesitaba un rasgo especial llamado App:

El primer fragmento de código se puede compilar con una herramienta scalac (similar a javac ). Supongamos que escribió el código @main def hello () = println(“¡Hola, mundo!”) en un archivo llamado HelloWorld.scala. Ahora puede compilar el archivo con el siguiente comando en la terminal:

Esto generará los archivos de código de bytes .class conocidos que se pueden ejecutar en la JVM. El compilador de Scala también genera archivos que terminan en .tasty. TASTy es un formato de intercambio de alto nivel para Scala 3 que significa árboles de sintaxis abstractos tipificados y representa todo su código fuente. Este formato ayuda a abordar el problema de borrado de tipos de archivos .class. Si genera una lista simple de enteros, por ejemplo, en Scala:

El archivo .class resultante terminaría luciendo así (esto se puede hacer con el comando javap ):

Como se puede ver, la Lista perdió su tipo Integer. TASTy permite una compilación separada y una recompilación para diferentes versiones de JVM simplemente compilando primero el código Scala en sabroso y luego en formato de código de bytes .class. El TASTy ayuda a mantener toda la información del código sin necesidad del código fuente original. Si se necesita una compilación de diferentes versiones de JVM, se puede usar el formato TASTy para volver a compilarlas.
¿Qué herramientas están disponibles para Scala?
Esta es una lista no exhaustiva de herramientas y material de Scala que son interesantes y útiles.
Coursier: un administrador de artefactos y aplicaciones de Scala que ayuda a configurar su entorno de desarrollo de Scala
Ammonite: ayuda a usar Scala como script o en un REPL (Read-Eval-Print-Loop)
sbt: una herramienta de compilación simple (sbt) para Scala y Java.
Scala-doc: la documentación de Scala contiene guías generales, guías de migración, referencia de idiomas y más información.
Metals: un servidor de lenguaje scala con ricas funciones IDE. Incluso puedes probarlo en línea.
¿Cómo puedo aprender más?
Este artículo es parte de una serie más amplia centrada en las tecnologías y los temas que se encuentran en la primera edición de Devoteam TechRadar. Para leer más sobre estos temas, descargue TechRadar .