Introduction To Groovy
-
Upload
manishkp84 -
Category
Technology
-
view
10 -
download
0
description
Transcript of Introduction To Groovy
![Page 1: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/1.jpg)
1
Introduction to Groovy
![Page 2: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/2.jpg)
2
Agenda
What is GroovyFrom Java to GroovyFeature
![Page 3: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/3.jpg)
3
What is Groovy?
Groovy is an agile and dynamic language for the Java Virtual Machine
Builds upon the strengths of Java but has additional power features inspired by languages like Python, Ruby & Smalltalk
Makes modern programming features available to Java developers with almost-zero learning curve
Supports Domain Specific Languages and other compact syntax so your code becomes easy to read and maintain
![Page 4: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/4.jpg)
4
What is Groovy?
Increases developer productivity by reducing scaffolding code when developing web, GUI, database or console applications
Simplifies testing by supporting unit testing and mocking out-of-the-box
Seamlessly integrates with all existing Java objects and libraries
Compiles straight to Java byte code so you can use it anywhere you can use Java
![Page 5: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/5.jpg)
5
From Java to Groovy
![Page 6: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/6.jpg)
6
HelloWorld in Javapublic class HelloWorld { String name;
public void setName(String name) { this.name = name; } public String getName(){ return name; }
public String greet() { return “Hello “+ name; }
public static void main(String args[]){ HelloWorld helloWorld = new HelloWorld() helloWorld.setName(“Groovy”) System.err.println( helloWorld.greet() ) }}
![Page 7: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/7.jpg)
7
HelloWorld in Groovypublic class HelloWorld { String name;
public void setName(String name) { this.name = name; } public String getName(){ return name; }
public String greet() { return “Hello “+ name; }
public static void main(String args[]){ HelloWorld helloWorld = new HelloWorld() helloWorld.setName(“Groovy”) System.err.println( helloWorld.greet() ) }}
![Page 8: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/8.jpg)
8
Everything in Groovy is public unless defined otherwise.
Semicolons at end-of-line are optional.
![Page 9: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/9.jpg)
9
class HelloWorld { String name
void setName(String name) { this.name = name } String getName(){ return name }
String greet() { return "Hello "+ name }
static void main(String args[]){ HelloWorld helloWorld = new HelloWorld() helloWorld.setName("Groovy") System.err.println( helloWorld.greet() ) }}
![Page 10: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/10.jpg)
10
Programming a JavaBean requires a pair of get/set for each property, we all know that. Let Groovy write those for you!
Main( ) always requires String[ ] as parameter. Make that method definition shorter with optional types!
Printing to the console is so common, can we get a shorter version too?
![Page 11: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/11.jpg)
11
class HelloWorld { String name
String greet() { return "Hello "+ name }
static void main( args ){ HelloWorld helloWorld = new HelloWorld() helloWorld.setName("Groovy") println( helloWorld.greet() ) }}
![Page 12: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/12.jpg)
12
Use the def keyword when you do not care about the type of a variable, think of it as the var keyword in JavaScript.
Groovy will figure out the correct type, this is called duck typing.
![Page 13: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/13.jpg)
13
class HelloWorld { String name
def greet() { return "Hello "+ name }
static def main( args ){ def helloWorld = new HelloWorld() helloWorld.setName("Groovy") println( helloWorld.greet() ) }}
![Page 14: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/14.jpg)
14
Groovy supports variable interpolation through GStrings (seriously, that is the correct name!)
It works as you would expect in other languages.
Prepend any Groovy expression with ${} inside a String
![Page 15: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/15.jpg)
15
class HelloWorld { String name
def greet(){ return "Hello ${name}" }
static def main( args ){ def helloWorld = new HelloWorld() helloWorld.setName("Groovy") println( helloWorld.greet() ) }}
![Page 16: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/16.jpg)
16
The return keyword is optional, the return value of a method will be the last evaluated expression.
You do not need to use def in static methods
![Page 17: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/17.jpg)
17
class HelloWorld { String name
def greet(){ "Hello ${name}" }
static main( args ){ def helloWorld = new HelloWorld() helloWorld.setName("Groovy") println( helloWorld.greet() ) }}
![Page 18: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/18.jpg)
18
Not only do POJOs (we call them POGOs in Groovy) write their own property accessors, they also provide a default constructor with named parameters (kind of).
POGOs support the array subscript (bean[prop]) and dot notation (bean.prop) to access properties
![Page 19: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/19.jpg)
19
class HelloWorld { String name
def greet(){ "Hello ${name}" }
static main( args ){ def helloWorld = new HelloWorld(name:"Groovy") helloWorld.name = "Groovy" helloWorld["name"] = "Groovy" println( helloWorld.greet() ) }}
![Page 20: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/20.jpg)
20
Even though Groovy compiles classes to Java byte code, it also supports scripts, and guess what, they are also compile down to Java byte code.
Scripts allow classes to be defined anywhere on them.
Scripts support packages, after all they are also valid Java classes.
![Page 21: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/21.jpg)
21
class HelloWorld {
String name
def greet() { "Hello $name" }
}
def helloWorld = new HelloWorld(name:"Groovy")
println helloWorld.greet()
![Page 22: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/22.jpg)
22
Javapublic class HelloWorld { String name;
public void setName(String name) { this.name = name; } public String getName(){ return name; }
public String greet() { return "Hello "+ name; }
public static void main(String args[]){ HelloWorld helloWorld = new HelloWorld() helloWorld.setName("Groovy") System.err.println( helloWorld.greet() ) }}
![Page 23: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/23.jpg)
23
Groovy
class HelloWorld {
String name
def greet() { "Hello $name" }
}
def helloWorld = new HelloWorld(name:"Groovy")
println helloWorld.greet()
![Page 24: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/24.jpg)
24
Feature
![Page 25: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/25.jpg)
25
Java is Groovy, Groovy is Java
Flat learning curve for Java developers, start with straight Java syntax then move on to a groovier syntax as you feel comfortable.
Almost 98% Java code is Groovy code, meaning you can in most changes rename *.java to *.groovy and it will work.
![Page 26: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/26.jpg)
26
Some other features added to Groovy not available in Java
Native syntax for maps and arraysdef myMap = ["Austin":35, "Scott":20]Native support for regular expressionsif ("name" ==~ "na.*" ) { println "wow" }Embedded expressions inside stringsdef name="jussi"; println "hello $name"New helper methods added to the JDKFor example String contains methods count(),
tokenize(), each()You can add your own methods to existing
classesOperator overloading a + b maps to a.plus(b)
![Page 27: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/27.jpg)
27
Closures
Closures can be seen as reusable blocks of code, you may have seen them in JavaScript and Ruby among other languages.
Closures substitute inner classes in almost all use cases.
Groovy allows type coercion of a Closure into a one-method interface
A closure will have a default parameter named it if you do not define one.
![Page 28: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/28.jpg)
28
Examples of closuresdef greet = { name -> println “Hello $name” }greet( “Groovy” )// prints Hello Groovy
def greet = { println “Hello $it” }greet( “Groovy” )// prints Hello Groovy
def iCanHaveTypedParametersToo = { int x, int y -> println “coordinates are ($x,$y)”}
def myActionListener = { event -> // do something cool with event} as ActionListener
![Page 29: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/29.jpg)
29
Iterators everywhere
As in Ruby you may use iterators in almost any context, Groovy will figure out what to do in each case
Iterators harness the power of closures, all iterators accept a closure as parameter.
Iterators relieve you of the burden of looping constructs
![Page 30: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/30.jpg)
30
Iterators in actiondef printIt = { println it }// 3 ways to iterate from 1 to 5[1,2,3,4,5].each printIt1.upto 5, printIt(1..5).each printIt
// compare to a regular loopfor( i in [1,2,3,4,5] ) printIt(i)// same thing but use a Rangefor( i in (1..5) ) printIt(i)
[1,2,3,4,5].eachWithIndex { v, i -> println "list[$i] => $v" }
// list[0] => 1// list[1] => 2// list[2] => 3// list[3] => 4// list[4] => 5
![Page 31: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/31.jpg)
31
The as keyword
Used for “Groovy casting”, convert a value of typeA into a value of typeBdef intarray = [1,2,3] as int[ ]
![Page 32: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/32.jpg)
32
Some examples of asimport javax.swing.table.DefaultTableCellRenderer as
DTCR
def myActionListener = { event -> // do something cool with event} as ActionListener
def renderer = [ getTableCellRendererComponent: { t, v, s, f, r, c -> // cool renderer code goes here }] as DTCR
// note that this technique is like creating objects in// JavaScript with JSON format// it also circumvents the fact that Groovy can’t create// inner classes (yet)
![Page 33: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/33.jpg)
33
XML Generation
import groovy.xml.*
data = ['Rod': ['Misha':9, 'Bowie':3],'Eric': ['Poe':5, 'Doc':4] ]
def xml = new MarkupBuilder()
doc = xml.people() {
for( s in data) {
person(name: s.key) {
for(d in s.value) {
pet(name:d.key, age:d.value)
}
}
}
}
println doc
![Page 34: Introduction To Groovy](https://reader034.fdocuments.in/reader034/viewer/2022051012/54540ae0af7959856d8b64b5/html5/thumbnails/34.jpg)
34
Output
<people><person name='Rod'><pet name='Bowie' age='3' /><pet name='Misha' age='9' /></person><person name='Eric'><pet name='Poe' age='5' /><pet name='Doc' age='4' /></person></people>