Archivo
Hello Scala!
Como no podia ser de otra forma, empezamos con el ejemplo canonico, Hello World, que imprime por pantalla un bonito mensaje:
object HelloWorld {
def main(args: Array[String]) {
println("Hello, world!")
}
}
Existen ya en este minimo ejemplo varias cuestiones dignas de mencion, en orden de aparicion
- La palabra clave object define un Singleton, una clase con una unica instancia
- Las funciones (o metodos) se definen con la palabra clave def
- El tipo de una variable se define con la sintaxis nombre : tipo (en lugar de tipo nombre en Java)
- Los arrays se definen con Array[Tipo], parametrizando la clase Array. La sintaxis de parametrizacion utiliza corchetes [], en lugar de los angulos <> de Java
De estas cuestiones, las mas significativas son la primera y la ultima. Primero, en Scala no existen los metodos estaticos. El equivalente son los metodos de un object. Al estar estos ligados a una unica instancia, hacen las veces de metodos ligados a una clase. Si se quieren combinar metodos asociados al Singleton y metodos asociados a la clase, se declara tanto una clase como un object con el mismo nombre.
En segundo lugar, podemos ver que Scala no contempla de manera especial los arrays, solventando elegantemente su tratamiento a traves de la parametrizacion de la clase Array. En Scala el acceso a un array es implementado por una funcion normal y corriente. Esta funcion es parte de la clase Array y por tanto puede ser parametrizada para cada posible tipo de array.
Segun vayamos explorando Scala veremos que los tratamiento unificados en detrimento de los casos particulares es un estilo recurrente de este lenguaje. Al principio puede resultar poco intuitivo si estamos acostumbrados a estos tratamientos especiales, por ejemplo en Java, pero segun uno se acostumbre ve el sentido y la elegancia de esta filosofia.
Finalmente, para que no quede nada en el tintero, mencionar brevemente que la referencia a String es de hecho una referencia a java.lang.String, la interaccion con Java es transparemente. Scala importa por defecto todos los miembros del paquete java.lang. En otros posts veremos mas en detalle esta interactuacion con Java; es desde luego uno de los puntos fuertes de Scala para lograr adopcion.
Ah, se me olvidaba. El que eche en falta en el ejemplo el dichoso punto y coma ‘;‘ al final de println(..) puede olvidarse de el. En Scala no es necesario, aunque el compilador no protesta si los ve.