Algunas características:
- Compila a bytecode (JVM)
- Es interoperable con Java (o sea, se pueden seguir usando librerías y frameworks existentes en Java)
- Es de tipo estático
- Inferencia de tipos
- Fusiona exitosamente programación funcional con OOP
- Tiene una forma de herencia múltiple llamada composición mixin
- "Conversiones implícitas": permiten extender librerías externas y hacer una especie de prototyping
- Incluye un intérprete ("REPL")
- Soporta XML como un tipo más
- Viene con librerías interesantísimas: concurrencia tipo Erlang, parser combinators, etc.
- ¿Qué más querés?
El sistema de tipos tiene cierta complejidad, que domino a medias, pero con eso en general alcanza. Más allá de todas las ideas incorporadas, tomadas de varios lenguajes e integradas por Martin Odersky en Scala, el reto mayor para quien viene de Java u otro lenguaje imperativo es asimilar el estilo de programación funcional.
Scala permite codificar en estilo imperativo, como si fuera un Java con diferente sintaxis. Eso puede estar bueno para ir metiéndose de a poco, pero de nada servirá si uno no busca avanzar a un código más funcional. El estilo funcional lamentablemente estuvo siempre muy divorciado de la industria y muy casado con la academia, pero esto ya está cambiando. Está presente en Python, Ruby, JavaScript; entró de lleno en .NET con C#/LINQ y F#, etc., y es probable que esta tendencia se profundice, aunque haya que terminar desechando Java por completo.
Se dice por ahí que "aprender programación funcional nos convierte en mejores programadores aunque nos dediquemos a la programación imperativa". Hay dos o tres cosas que me gustaría rescatar en ese sentido, para un próximo post, aplicables a cualquier lenguaje. Son cosas bien sencillas que se nos escaparon por mucho tiempo, y pueden ser un buen punto de entrada a los beneficios del paradigma funcional.
¡Salud!
No hay comentarios:
Publicar un comentario