Intrigado con Scala - parte 1

Publicado el Miércoles, 16 de octubre de 2013
Scala

Scala

Intentando retomar Scala, volví a leer la revista PragPub de The Pragmatic Programmer. El número 17 de Setiembre de 2011 inauguró "Scala for the intrigued", una serie de artículos sobre Scala. Pueden leerlo acá.

Empecé a leerlos en el momento que salieron y ahora me puse como objetivo repasarlos todos desde cero. Para que el compromiso tenga más peso, pienso compartir apuntes de cada uno por acá, así me presiono a seguir adelante. Pero antes de pasar a los apuntes, repaso un poco sobre Scala en sí:

Scala es un lenguaje de programación con apenas 10 años de existencia. Fue creado en Suiza por Martin Odersky y un grupo de investigación. Hoy en día es un lenguaje de programación Open Source maduro y de amplio uso.

La promesa de Scala es tener lo mejor de dos mundos: La programación orientada a objetos y la programación funcional. Les recomiendo visitar el sitio web de Scala, tiene un diseño nuevo excelente y hay recursos a granel para leer.

Ahí mismo nos presentan "Scala in a Nutshell" (en pocas palabras):

  • Interoperabilidad transparente con Java - Scala se ejecuta en la JVM, así que se pueden mezclar los stacks de Scala y Java libremente para una integración completa.
  • Inferencia de tipo - El sistema de tipado no es tan estático, "no trabajes para el sistema tipado, deja que trabaje para tí".
  • Concurrencia y distribución - Uso de operaciones data-parallel en colecciones, uso de actores para concurrencia y distribución, o futures para programación asíncrona
  • Traits (también hay un artículo sobre es en PragPub) - Combina la flexibilidad de interfaces tipo Java con el poder de las clases.
  • Macheo de patrones - Piensa en "switch" con esteroides. Machea contra jerarquías de clases, secuencias y más.
  • Funciones de alto nivel - Las funciones son objetos de primera clase. Compónlos con seguridad de tipo garantizada. Úsalos donde sea, pásalos a cualquier cosa.

De toda esta lista me gustaría poder decir que sé cómo y cuándo usar cada una de las características, pero estaría mintiendo. Pero para eso estamos en campaña de aprender Scala. Sirven como punto de referencia de cosas que todavía no conozco, y posiblemente se repasen en otras instancias de Scala for the Intrigued. Voy con la primera parte:

PragPub

PragPub

Para empezar el autor Venkat Subramaniam cuestiona los motivos para aprender Scala. El primero, porque es divertido. Si programar es nuestra pasión, no necesitamos más motivos.

Pero por otro lado comenta como Scala le agrega desafíos a la vida de un programador Java. Introduce algunos conceptos nuevos y nuevas formas de escribir el código (más expresivo, menos código) que exigen pensar de una manera distinta y evitar tanta ceremonia y concentrarse más en el qué hacer.

Java es un lenguaje "viejo" y ya muestra sus años. Scala es probablemente como Java hubiera sido si lo hubieran creado hace 10 años en vez de hace 18 años.

Para demostrar esto, usa el clásico ejemplo del Hola Mundo. En Java tenemos que escribir en un archivo llamado HolaMundo.java:

public class HolaMundo{
    public static void main(String[] args){
        System.out.println("Hola Mundo!");
    }
}

Después en la consola:

fernando@hoth ~/workspace $ javac HolaMundo.java 
fernando@hoth ~/workspace $ java HolaMundo 
Hola Mundo!

En Scala hacemos simplemente:

fernando@hoth ~/workspace $ scala
Welcome to Scala version 2.9.2 (OpenJDK 64-Bit Server VM, Java 1.7.0_25).
Type in expressions to have them evaluated.
Type :help for more information.
 
scala> println("Hola Mundo!")
Hola Mundo!

Scala cuenta con un REPL (Read Evaluate Print Loop), o shell interactivo donde podemos ejecutar código directamente. También podemos guardar el código en un archivo de texto con extensión .scala y ejecutarlo en la consola:

scala holamundo.scala

Muestra otro ejemplo en Java donde usa el método sleep de la clase Thread. Java nos obliga a manejar la posible excepción con sleep, pero no así Scala. En Scala si no atrapamos una excepción, se propaga automáticamente. Espera que seamos responsables pero no nos obliga a hacerlo.

En ese mismo ejemplo usa el operador ternario que no está disponible en Scala. Esto es porque el if no es una sentencia, es una expresión que devuelve un valor. Scala provee menos construcciones pero más poderosas. Los bloques pequeños de código se configuran de maneras diferentes para formar estructuras mayores.

Como se ve en el primer código de ejemplo, no es necesario tener una clase en Scala, pero sí se pueden crear.

Si no conocían Scala, espero les haya despertado el interés. Pienso seguir metiéndome más en el tema e intentaré ir publicando al respecto para estar conciente del progreso, espero sus comentarios. Les dejo links

  • Scala: Sitio oficial
  • PragPub - revista mensual de The Pragmatic Bookshelf. Los primeros 49 números están disponibles para descargar gratis en este sitio.
  • PragPub #27 - número donde se incluye el primer artículo de "Scala for the intrigued". Descargar: HTML PDF epub mobi

9 comentarios en este post

Feed de comentarios
  1. Avatar

    Rodolfo 16 octubre. 2013 - 13:41

    Hola Fernando, buen reporte gracia me tiene interesado scala pero podrias poner algunas diferencias a cuanto rendimiento contra java, supongo al usar Scala con la jvm el consumo de ram es mayor que otros programas.
    Saludos!.

    • Avatar

      Fernando 18 octubre. 2013 - 00:29

      No tengo ninguna referencia específica. Pero justo hoy estuve en un Meetup de Scala en Montevideo y una de las cosas que comentaban es que Scala tiene pendiente mejorar la velocidad del compilador. Supongo que es un tema al inicio, pero después no debería haber diferencia con Java una vez compilado a Java bytecode, ¿no?

    • Avatar

      Gabriel 18 octubre. 2013 - 22:32

      Scala en rendimiento en cuanto a velocidad, puede llegar a la par con Java pero en su uso normal es un poquito mas lento (aunque para el 99% de los casos, no importa)

      En los benchmarks esta a la par.
      http://benchmarksgame.alioth.debian.org/u32/benchmark.php?test=all&lang=scala&lang2=java&data=u32

      Como Scala genera mas bytecode y el estilo inmutable favorece la creacion de nuevos objetos, puede sobrecargar un poco mas el garbage collector.

      De todos modos, estas consideraciones son solo para codigo de performance super critica, y con un poco de cuidado se puede escribir codigo Scala con igual performance que Java (con la desventaja que en general , la solucion termina pareciendose mucho a como uno lo resolveria en Java)

      Lo de la velocidad del compilador, es cierto, al ser un lenguaje mas complejo, el compilador es mas lento que el de Java, pero no influye en la ejecucion, y las herramientas de compilacion que hay (SBT) mitigan mucho el problema.

  2. Avatar

    Juan 12 septiembre. 2014 - 15:41

    Que tal Fernando:
    Estoy muy interesado en saber mas sobre es lenguaje de programacion, te agradeceria mucho si puedo conseguir a través tuyo algunos link de tutoriales y/o cursos. Muchas gracais por tu ayuda
    Juan

Dejar un comentario

Toasty!