Welcome to the Java Programming Forums


The professional, friendly Java community. 21,500 members and growing!


The Java Programming Forums are a community of Java programmers from all around the World. Our members have a wide range of skills and they all have one thing in common: A passion to learn and code Java. We invite beginner Java programmers right through to Java professionals to post here and share your knowledge. Become a part of the community, help others, expand your knowledge of Java and enjoy talking with like minded people. Registration is quick and best of all free. We look forward to meeting you.


>> REGISTER NOW TO START POSTING


Members have full access to the forums. Advertisements are removed for registered users.

View RSS Feed

copeg

The Groovy in Java

Rate this Entry
Although scripting languages seem like dime a dozen, there is always that learning curve to become familiar (let alone an expert) with a new language. For those who are more familiar with java - enter groovy. Groovy is a powerful higher level language based upon java, making certain tasks trivial to accomplish relative to the low level java equivalent. The power of groovy comes into play in its ability to plug-into java, and be plugged into from java. Groovy can access class files and libraries, can be compiled into class files and libraries, or simply used for quick and dirty one time operations.

Groovy is a simple language to learn if one knows the basics of java. Rather than reiterate what already exists in tutorials, I will demonstrate the ease of using groovy relative to the equivalent in java. Note that the demonstrations below are trivial examples which only print to the command line - typically one wishes to do more than print to the command line.

Reading Files:
Below are 2 examples which read a file and print the output to the command line

In java
BufferedReader reader = null;
try{
	reader = new BufferedReader(new FileReader("filePath"));
	while ( ( line = reader.readLine() ) != null ){
		System.out.println(line);
	}
}catch(IOException e){
	throw e;
}finally{
	if ( reader != null ){
		try{reader.close;}catch(Exception e){}
	}
}

In groovy
f = new java.io.File("filePath");
lines = f.readLines();
println("loop");
for ( int i = 0; i < lines.size(); i++ ){
   println lines[i]
}

Both methods accomplish the same task, but the differences should be obvious (in particular, the number of lines).

Reading a web page:

Java
try{
    URL url = new URL(myWebpageURL);
    URLConnection conn = url.openConnection();
    BufferedReader reader = null;
    try{
    	reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    	while ( ( line = reader.readLine() ) != null ){
    		System.out.println(line);
    	}
    }catch(IOException e){
    	throw e;
    }finally{
    	if ( reader != null ){
    		try{reader.close;}catch(Exception e){}
    	}
    }
 
    }catch(Exception e){
        e.printStackTrace();
    }

Groovy

myURL = new java.net.URL(myWebpageURL)
println(myURL.getText())

Hmmm…2 lines versus, well, I lost count. Of course, in both of the situation above, writing utility functions and libraries would greatly facilitate the process, reducing repeated calls down to a single method call. Often times however, these libraries can be cumbersome when managing across multiple projects - necessitating imports, classpath management, and making library updates difficult.

Data Structures
How about data structures? Maps and Lists are a breeze to create in groovy
myMap = [0:"zero", 1:"One", 2:"Two"]
myList = [0,1,2,3]
println myMap[0]//prints zero
println myMap[myList[0]]//prints zero

Function Pointers
Java lacks what those with a C background would call function pointers - the ability to pass references to a particular method. These operations are allowed in groovy through groovy's closure capability
f1 = {println "first"}
f2 = {println "second"}
 
x = 0;
def fun
if ( x == 0 ){
    fun = f1
}else{
    fun = f2
}
 
fun()

User Interfaces
Swing user interfaces? The code below creates a very simple JFrame with a JButton that prints to the command line when pressed.
import groovy.swing.SwingBuilder
 
sb = new SwingBuilder()
frame = sb.frame(title:"Groovy Frame"){
   button(text:"Press Me", actionPerformed:{
           println "I've been pressed"
       }
   )
}
frame.pack()
frame.setVisible(true)

The above shows just a taste of what groovy has to offer. Additional features include ease regular expressions (together with with perl like syntax), classes, threads, SQL connections, and just about anything that can be done in java.

While there are many other languages which provide similar ease of features (perl, php, etc…), groovy provides advantages to a programmer more comfortable in java, and allows one to plug into pre-existing java libraries. Groovy provides very convenient regular expression utilities similar to Perl, a runtime console to quickly interpret short snippets of code, java like exceptions (which provide a wealth of details regarding compile and/or runtime errors), and much more. The high level implementation of Groovy allows projects - both large and small - to be developed quickly without the need for lower level code management.

Links:
Groovy - Home
IBM: Feeling Groovy

Updated June 23rd, 2011 at 10:07 AM by copeg

Categories
Scripting

Comments

  1. JavaPF's Avatar
    permalink
    Very interesting copeg. I have not seen Groovy before. I'll be sure to do some more reading up on it