• facebook
  • flickr
  • google
  • instagram
  • lastfm
  • linkedin
  • spotify
  • twitter
  • Goodreads
  • GitHub
  • juanignaciosl.github.io
  • Medium
Tres ejercicios en Scala

Tres ejercicios en Scala

¡Hay que salir de la zona de confort! ¡Hay que aprender! ¡Hay que dejar de calentar la silla!

Estoy probando varios lenguajes además del “primario”, Java. Últimamente vengo trabajando en inCitee con Objective-C y Python (con Django), además de los obligados HTML/Javascript/CSS, pero quería probar algún otro. Aunque tanteé el naciente Ceylon al final me he decantado por coger Scala en serio, por las siguientes razones:

  • Tipado fuerte pero no engorroso.
  • Permite combinar programación orientada al objeto y funcional.
  • Funciona sobre JVM y va como un tiro.
  • Ver si el hype sobre Play es justificado.

En base a esto, acabo de subir a GitHub tres ejercicios que prentenden implementar lo esencial de las “pruebas de acceso a Spotify“. No voy a presentarme a ellas, así que tampoco me he agobiado con que los ejercicios estuviesen correctos, principalmente quería familiarizarme con el lenguaje. Con que pasasen los casos de prueba de ejemplo me daba por satisfecho.

Las tres soluciones son proyectos Eclipse.

Reversed Binary

En el código de esta solución destaca lo siguiente respecto a Scala (es tan sencillo que no da para mucho):

  • Integración total con Java: tanto el Integer.parseInt como el Integer.toBinaryString son invocaciones directas a Java, mientras que reverse no lo es.
  • Inferencia de tipos: aunque reverse devuelve el valor de la última expresión, que es un Int, ni siquiera tengo que declararlo. El compilador lo puede inferir, pero no es necesario cubrir tu código con elementos redundantes.
  • No hay “estáticos”, lo más análogo son declaraciones de object. Por cierto, en Scala todo (todo) son objetos.
  • Hay herencia simple, pero puedes usar mixins (ver la clase del test).
  • El lenguaje en si mismo es escalable. “should”, que parece una palabra reservada, es una expresión añadida con el mixin ShouldMatchers.
  • No, no necesitas poner punto y coma (casi nunca) ;-)

Zipf’ Song

Ver código.

  • Scala, como buen lenguaje funcional, tiene un potente sistema de listas. Aquí sólo se intuye, pero para aprovechar el lenguaje hay que dominarlas (y los Streams).
  • Soporta ternas, para, por ejemplo, devolver múltiples valores en una función, pero sobre todo como mecanismo ágil para estructuras de datos.
  • ¡Lambdas! Obviamente, por ser un lenguaje funcional, pero es lo que más echo en falta en Java. La facilidad, por ejemplo, para filtrar listas, es espectacular (Google Guava y LambdaJ cubren esto en parte, pero no es lo mismo). La solución a este ejercicio es esencialmente una línea, en Java habrían sido bastantes más sólo por tener que recorrer las colecciones para filtrar o proyectar.

Cat Vs. Dog

Vaya por delante que apostaría a que el código está mal. Este problema pide a gritos usar grafos, pero no era mi objetivo al hacer esto. Así que si lo mandas a Spotify y no te contestan no me eches la culpa.

  • La declaración de la clase funciona como constructor por defecto, y la declaración de sus parámetros como val genera automáticamente accessors. ¡Super cómodo!
  • Las colecciones (todo, en general) en si tienen un API digno, con operaciones como interescciones, restas, filtros…

Conclusiones

Scala es brutal. Tiene de todo (muchos opinan que demasiado), lo cual permite adaptar tu curva de aprendizaje. Apostaría a que dentro de unos meses cogeré este código y lo reharé entero. Y la sensación de estar escribiendo en un lenguaje “de script”, débilmente tipado, como Ruby o Python, además de ser mucho más escueto que Java, es muy interesante. 100% recomendable.

¡A aprender!

¿Me dejas una respuesta?