Groovy is another language for Java Virtual Machine. It’s built on Java, seamlessly integrates with existing Java classes, and compiles to byte code. It’s Object-Oriented (even more where numbers are also objects), and supports the same programming model as Java. However, it’s also a dynamic language with additional powers like scripting and DSL. It reduces scaffolding code that makes it more readable, maintainable and increases productivity.
Groovy is very similar in syntax with java, so developers from java side can learn it easily. It also supports java syntax that means some of java programs can also run over groovy. To learn it we first look at a simple Hello World java program, and then we discuss line by line groovy versions of this java code.
Traditional Java Program
Let’s have a look at simple hello world java program,
HelloWorld is always used as very basic example to learn any programming language. We start with this to easily understandable class
HelloWorld, which contains entry point method
main. And it prints “Hello World!” on the program console. Now start migrating from this java code to groovy code/script.
First step to Groovy
As I mention earlier some of the java programs may also run over groovy without changing a single line of code. Exactly, this program can also run in groovy environment and it behaves same. Although, it can run over groovy but we can’t say it a groovy program. First of all we remove some scaffolding code to improve code readability.
If we look at the very first line of the java code, it’s a class declaration with
public access modifier.
Class and all its methods are by default public in groovy.
So there is no need to explicitly specify
public with class declaration or even with
Semicolon is a very basic element in a program structure, in java semicolon is mandatory for statement termination.
Note: But there are some situations where you need to use the semicolons in your groovy application for smooth execution.
Semicolons are optional in Groovy.
For now we can remove all the semicolons in our program and it will work fine. Java is a statically typed language, whereas groovy is not that;
Groovy supports dynamic typing.
So we can drop argument’s type information from the
Default return type is void
Based on this default behavior we can ignore
main method and the signature of
main would be just
Lots of new helper methods are added to the groovy JDK. It gives handy methods and shortcuts for some routine tasks such as console printing. You can replace
System.out.println() with just
println(). At this level we are almost done with scaffolding and lets see how code looks like with these changes.
It’s really neat and handsome piece of code that is very easy to understand.
Wait for a minute
Groovy is a scripting language as it allows you to write some free form programs that don’t require you to define a class structure. We may use these scripts in Unix shell, in our existing java code or just on command line.
We can optionally omit parentheses for top-level statements (a statement which is just a method call with some parameters). So at the end we leave
main method back in java and use just the code as script in groovy.
Here it is, the smallest hello world example in groovy presented to you;
Wow! It’s really awesome; the groovyfied code is much more readable, succinct and crispy.
If we compile the above script to bytecode using groovyc, it will generate a single class named after the name of the script file. e.g. if this was saved in HelloWorld.script, a HelloWorld.class file will be the output just like java. When we execute this class, it execute the autogenerated
main(String args) method in the bytecode.
Last but not Least
At the end we recap all in few points to summarize as a feature list that we learned in this post.
- Class and all its methods are by default
- Semicolons are optional.
- Dynamic and static typing is supported
- Default return type is
- Omit parentheses
- Groovy is a scripting language
Where to go next
You can get more familiar with groovy, some advance concepts in the next part.