sábado, 26 de abril de 2014

Aprender Scala ... o no hacerlo

¿Qué tiene Scala que no tenga Java?


1. Clases, setters y getters

En Java:

public class Javesco{
     private String nombre="";

     public Javesco(){}

     public Javesco(String nombre){
           this.nombre=nombre;
     }
 
   //setter y getter
    public void setNombre(){ this.nombre=nombre; }
    public String getNombre(){ return nombre; }


En Scala:

class Simple(){
   var nombre:String=""
}

Obviamente escribimos menos código, sin embargo esto también puede parecernos confuso (al menos al principio),¿donde queda el private, protected o el public?. La razón es que Scala es un lenguaje más flexible, nos permite hacer muchas cosas, cambiar la manera en que planteas las soluciones.



Creando una clase "compleja":

class Compleja(val  _nombrex:String=null){

    private var  _nombre:String=_nombrex

   //setter y getter
   def nombre=_nombre
   def nombre_=(value:String):Unit=_nombre=value

}


Este código es más parecido a la clase hecha en Java.En esta definimos los setters y getters. Aunque la de arriba es más legible y sencilla de entender(Simple).


Ahora creamos un archivo llamado Codemonkey.scala y escribimos: 


object Codemonkey{

    def main(args: Array[String]): Unit = {

          val simple=new Simple
          simple.nombre="Scala Johansson"
         Console.println("Hola "+simple.nombre)
  
        val compleja=new Compleja("Jonh Worth")
        Console.println("Hola "+compleja.nombre)

    simple.nombre="Maria Java"
    compleja.nombre="Tom Groovy"

    Console.println("Hola "+simple.nombre)
    Console.println("Hola "+compleja.nombre)

    }

}

Sigue siendo un código legible, no cambia mucho. Scala nos permite hacer las cosas de diferentes maneras.

2. Los import

En Java es necesario definir las clases y/o librerías externas desde la cabecera del código. 

import javax.swing.JOptionPane;

public class Codemonkey{

       public static void main(String ... args){
           JOptionPane.showMessageDialog(null,"Hola desde codemonkey");
       }

}

Con Scala no es necesario, podemos definir los import desde cualquier parte del código.

object Codemonkey{
       def main(args: Array[String]): Unit = {
           import javax.swing.JOptionPane
           JOptionPane.showMessageDialog(null,"Hola desde codemonkey")
      }
  }

3. Conservar los proyectos ya hechos.

Scala al ser dependiende de la JVM permite interoperabilidad con proyectos Java.


Creamos una clase Java llamada Prueba.java y la compilamos, nos generará un *.class

public class Prueba{

   public void verMensaje(){
      System.out.println("Hola Scala soy un método creado desde una clase Java");
   }

}

Ahora creamos el código en Scala, instanciamos la clase Prueba

object Codemonkey{
  def main(args: Array[String]): Unit = {
    val prueba=new Prueba
    prueba.verMensaje
  }

}
Java sigue siendo un buen lenguaje y bastante usado, aunque la verdad al crecer tanto la complejidad para aprenderlo también lo hizo. 

¿Qué más tiene Scala?

Concurrencia, pattern matching,traits, etc.  Un mundo de posiblidades se presenta, tal vez en próximos post ponga más ejemplos.

Por lo pronto no sé si convenga aprender Scala (algunos les parecerá perdida de tiempo, a otros no tanto), pero vaya que si es interesante.

No hay comentarios:

Publicar un comentario