Friday, January 4, 2013

Tutorial Grails #2

Tutorial ini melanjukan dari seri Tutorial Grails sebelumnya, yaitu Install Grails. Saat ini kita akan mempelajari Groovy.

Apa sih Groovy ?
Groovy adalah dynamic language yang berjalan diatas Java Virtual Language (JVM). Groovy diinspirasi oleh bahasa pemrograman lain seperti Ruby, Python, Perl dan Smaltalk. Groovy bisa berjalan sebagai interpreted atau compiled.

Cukup dengan teori, mari kita lanjutkan adalah Instalasi, yaitu:

  1. Download groovy versi terbaru di sini.
  2. Unzip groovy-binary-X.X.X.zip di lokasi yang anda inginkan.
  3. Set GROOVY_HOME
  4. Tambahkan GROOVY_HOME/bin di PATH
validate your installation

Next, kita akan melihat mudahkan migrasi dari java ke groovy. Berikut contoh program menggunakan java (Todo.java).

       
package com.yukibuwana.testing;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Todo {
 private String name;
 private String note;
 
 public Todo(String name, String note) {
  this.name = name;
  this.note = note;
 }
 
 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getNote() {
  return note;
 }

 public void setNote(String note) {
  this.note = note;
 }

 public static void main(String[] args) {
  List<Todo> todos = new ArrayList<Todo>();
  todos.add(new Todo("1", "one"));
  todos.add(new Todo("2", "two"));
  todos.add(new Todo("3", "three"));
  
  for (Iterator<Todo> iterator = todos.iterator(); iterator.hasNext();) {
   Todo todo = (Todo) iterator.next();
   System.out.println(todo.getName() + " " + todo.getNote());
   
  }

 }

}
 

Setelah kita compile dan dijalankan, hasilnya seperti ini

       
1 one
2 two
3 three
 

Groovy-nya gimana ?

Cara termudah mengubah dari java menjadi groovy, yaitu :
  1. Ubah extensions file dari .java menjadi .groovy
  2. Compile file groovy (groovyc xxx.groovy).
  3. Hasil dari compile groovy adalah class, sama seperti java.
  4. Jalankan class file tersebut.
Yups... Hasil dari compile groovy adalah class file

Jadi apa yang dilakukan oleh groovy ? 

Mari kita lihat hasil dari decompiler dari file class tersebut.

       
package com.yukibuwana.testing;

import groovy.lang.GroovyObject;
import groovy.lang.MetaClass;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
import org.codehaus.groovy.runtime.callsite.CallSite;
import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;

public class Todo
  implements GroovyObject
{
  private String name;
  private String note;

  public Todo()
  {
    Todo this;
    CallSite[] arrayOfCallSite = $getCallSiteArray();
    MetaClass localMetaClass = $getStaticMetaClass();
    this.metaClass = localMetaClass;
  }

  public static void main(String[] args)
  {
    CallSite[] arrayOfCallSite = $getCallSiteArray(); List todos = (List)ScriptBytecodeAdapter.castToType(arrayOfCallSite[0].callConstructor(ArrayList.class), List.class);
    arrayOfCallSite[1].call(todos, arrayOfCallSite[2].callConstructor(Todo.class, ScriptBytecodeAdapter.createMap(new Object[] { "name", "1", "note", "one" })));
    arrayOfCallSite[3].call(todos, arrayOfCallSite[4].callConstructor(Todo.class, ScriptBytecodeAdapter.createMap(new Object[] { "name", "2", "note", "two" })));
    arrayOfCallSite[5].call(todos, arrayOfCallSite[6].callConstructor(Todo.class, ScriptBytecodeAdapter.createMap(new Object[] { "name", "3", "note", "three" })));

    for (Iterator iterator = (Iterator)ScriptBytecodeAdapter.castToType(arrayOfCallSite[7].call(todos), Iterator.class); DefaultTypeTransformation.booleanUnbox(arrayOfCallSite[8].call(iterator)); ) {
      Todo todo = (Todo)ScriptBytecodeAdapter.castToType(arrayOfCallSite[9].call(iterator), Todo.class);
      arrayOfCallSite[10].call(arrayOfCallSite[11].callGetProperty(System.class), arrayOfCallSite[12].call(arrayOfCallSite[13].call(arrayOfCallSite[14].call(todo), " "), arrayOfCallSite[15].call(todo)));
    }
  }

  static
  {
    __$swapInit();
  }
}
       

Yups... Banyak code yang di inject oleh groovy.

Bedanya dengan java apa donk ?

Betul.. Setelah di compile dengan groovy, file class jadi lebih rumit. Tetapi, groovy make java code become art. Mari kita lihat coding bergaya groovy


package com.yukibuwana.testing

import java.util.Iterator;

public class GroovySimple {
 String name
 String note
 
 public static void main(String[] args) {
  def todos = new ArrayList()
  todos.add(new GroovySimple(name:"1", note:"one"))
  todos.add(new GroovySimple(name:"2", note:"two"))
  todos.add(new GroovySimple(name:"3", note:"three"))
  
  for (Iterator iterator = todos.iterator(); iterator.hasNext();) {
   def todo = iterator.next()
   
   println "${todo.name} ${todo.note}"
   
  }
  
 }

}


Dan wooola... Groovy make it code become art and simple..

No comments:

Post a Comment