viernes, 9 de julio de 2010

Scala


Estuve leyendo un rato sobre este lenguaje, para resumir un poco sus características, es un lenguaje multipropocito y multiparadigma ya que mezcla la programación Orientada a objetos y la programación funcional, esta es una característica que lo hace muy interesante.

Otra cosa importante es que scala es compatible con java es decir que corre sobre jvm y puede utilizar jars.

Veamos un ejemplo de Quicksort:

def sort(xs: Array[Int]): Array[Int] = {
if (xs.length <= 1) xs
else {
val pivot = xs(xs.length / 2)
Array.concat(
sort(xs filter (pivot >)),
xs filter (pivot ==),
sort(xs filter (pivot <)))
}
}

Como podemos ver en el ejemplo es diferente a lo que estamos acostumbrados, dado que se mezcla con la programación funcional.
  1. El algorismo lo primero que hace es ver si el vector tiene 1 o 0 elementos si es así ya se encuentra ordenado, así que lo devuelve.
  2. Si tiene más elementos toma el elemento del medio como pivot y luego corta el vector en 3 los menores al pivot, los iguales y los mayores.
  3. Luego ordena los subconjuntos menor y mayor y así recursivamente.
  4. El resultado es la suma de los subvectores.

Vieron lo raro que filtra los menores y mayores podria usar el “.” es decir xs.filter(pivot ==). Esto es smalltalk-like como cualquier elemento es un objeto y todo usa objetos el indicador de llamadas a metodos puede ser el espacio o punto. De esta forma podemos hacer 1 + 1 o 1.+(1)

Otra característica es que al igual que ruby la ultima expreción ejecutada es el return de la función.

Esta muy bueno no? Alguien lo utiliza?

Dejo links:

http://www.scala-lang.org/