53
An Intertech Course Groovy Tutorial Intertech Inc.

Groovy Tutorial

Embed Size (px)

DESCRIPTION

Java vs. Groovy (and yes Hello World in Groovy) What is Groovy? Why Groovy? Potential Issues with Groovy Groovy Features (not found in Java) What you need to do Groovy Feature Overview (Manager warning – some code here!) MOP – the secret sauce of Groovy Groovy Ecosystem How to Proceed with Groovy Resource List and Q&A.

Citation preview

Page 1: Groovy Tutorial

An Intertech Course

Groovy Tutorial

Intertech Inc.

Page 2: Groovy Tutorial

Intertech

Copyright © Intertech, Inc. 2012 • http://www.Intertech.com • 800-866-9884 • Slide 2

IntertechInstructors Who Consult, Consultants Who Teach

Training• Training through hands-on,

real world business examples.

• Our site, your site, or live online – globally.

• Agile/Scrum, Citrix, VMware, Oracle, IBM, Microsoft, Java/Open Source, and web and mobile technologies.

Consulting Design and develop software

that powers businesses and governments of all sizes.

On-site consulting, outsourcing, and mentoring.

Agile, .NET, Java, SQL Server, mobile development including iPhone and Android platforms and more….

Our Company Over 35 awards for growth,

innovation and workplace best practices.

99.7% satisfaction score from our consulting and training customers.

Yearly “Best Places to Work” winner in Minnesota.

Page 3: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 3

Agenda

• Java vs. Groovy (and yes <sigh> Hello World in Groovy)

• What is Groovy?

• Why Groovy?

• Potential Issues with Groovy

• Groovy Features (not found in Java)

• What you need to do Groovy

• Feature Overview (Manager warning – some code here!)

• MOP – the secret sauce of Groovy

• Groovy Ecosystem

• How to Proceed with Groovy

• Resource List and Q&A.

Page 4: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 4

Who is this guy?

• Jim White – [email protected]

• Intertech Instructor & Director of Training

• Author J2ME, Java in Small Things – 2002, Manning

• International Speaker• Including JavaOne

• Contributor to many journals including:• JDJ

• DevX.com

• JavaPro

• Consultant, engineer and architect with several companies

• AND… a Groovy newbie!

Page 5: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 5

Audience check, warnings, caveats, etc.• How many of you are already Groovy developers?

• Probably not much in this talk for you – sorry. But you can help keep me honest.

• How many of you have experimented with Groovy?

• May be a little in it for you.

• It’s an hour long talk – that’s not much time to introduce a whole language.

• How many of you have a Java background but are not familiar with Groovy yet?

• Perfect!

• If you know Java and are wondering what Groovy is – this talk is on the mark.

• How many of you manage Java development teams?

• Also perfect!

• If you are a manager of Java development teams and want to know if Groovy can add something to the team – this talk is for you (minus some of the coding).

• How many of you don’t know Java?

• Ouch! – this may hurt a bit, but hopefully you’ll get a little bit from it.

Page 6: Groovy Tutorial

An Intertech Course

Examples of Groovy at a High Level

How does it compare to Java?

"Always program as if the person who will be maintaining your program is a

violent psychopath that knows where you live.“

~Martin Golding

Page 7: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 7

Groovy v. Java - a first look

• What if we had to complete a small task.

• How much code would it take to…

• Create a list of people

• Sort the list by last, first name

• Select the people older than 50 from that list

• Write these people to a file (CSV format)

• Java

• LOC: 319

• Time to develop: ~2 hours

• Execution time: ~30ms

• From somebody that has ~14 years of Java experience

• Groovy

• LOC: 115

• Time to develop: ~1 hour

• Execution time: ~700ms

• From somebody that has < 1 month of Groovy experience

Page 8: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 8

For those that really want Hello World in Groovy…

println ‘Hello World’

Satisfied!?

Page 9: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 9

What is Groovy?

• It was created in 2004.

• by James Strachan and Bob McWhirter (Codehaus)

• Groovy 1.0 released 2007

• Current release: 1.8 (version 2.0 in the works)

• It is an alternate language for the JVM.

• But as a companion to Java vs. a replacement for Java.

• Brings the power of languages like Ruby, Smalltalk, Python,... to the JVM.

• Keep the elegance, robustness, support of the Java syntax and platform.

• Groovy is the second language under standardization for the Java platform.

• What Java 2.0 would look like if we had the chance (??).

• It is a dynamic programming language.

• But what does dynamic mean? (more on that in a bit).

• Optionally typed (not dynamically typed - more on this in a bit).

Page 10: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 10

JVM

Groovy and Java are Symbiotic

• Groovy runs in the JVM.

• Groovy code can be compiled into a “normal” Java .class files.

• Groovy code can call on Java classes.

• Groovy classes can be called on by Java classes.

• Every Groovy type is a subtype of java.lang.Object.

• Groovy classes can extend Java classes & implement Java interfaces.

• And vice versa!

• Groovy is syntactically aligned with Java.

• But can also be more compact and precise .

• The only language besides Java that fully

supports generics and annotations.

Groovy

Java

Page 11: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 11

Cross Language Integration Ladder

• A measure of languages integration capability

• Groovy goes all the way to the top

• From Groovy in Action

Page 12: Groovy Tutorial

An Intertech Course

Why Groovy

A Case for Using Groovy

Page 13: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 13

Why Groovy?

• Productivity

• More concise and meaningful code (vs. Java)

• Feature set (see next slide)

• Use as much or as little as you like with your Java applications

• All it takes is an additional JAR file in the classpath

• Dynamic nature (which adds to productivity)

• Optional typing

• Add operators

• Methods as objects (“Metaprogramming”, Closures, …)

• Community driven, corporate backing

• JSR-241

• SpringSource/VMware

Page 14: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 14

Groovy Features (not found in Java)• Closures

• Collection literals

• Properties (GroovyBeans or POGO)

• Metaprogramming

• Multi-line strings

• String interpolation

• Mixins/Categories

• Named arguments

• Default arguments

• Everything’s an Object (even numbers)

• Operator overloading

• GPath expressions

• Additional operators

• And much much more…

Page 15: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 15

Falsities

• Groovy is just for scripting.

• It can be used for scripting (and it is powerful in that role) .

• But it can also do a lot more.

• Groovy is all about closures. “It’s a functional programming language.”

• Groovy borrows from functional programming languages (like LISP or Clojure).

• Groovy ≠ functional programming language

• Groovy uses closures (a lot) – it’s a language feature not the language feature.

• Is Java all about code blocks?

• Groovy is good if you do TDD

• While this statement is true, it wouldn’t be the only reason to use Groovy.

• Groovy allows unit tests to be a first class citizens of your code.

• But it no more requires them than does Java.

• Use Groovy only if you want to use Grails.

• Grails is a powerful Web development framework.

• But Groovy has a lot to offer everyday Java developers.

Page 16: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 16

Groovy Issues

• Groovy can be slow(er).

• Groovy 1.8.x is 100+ times faster than Groovy 1.0 at Fibonacci computing test.

• Only 12% slower than Java at the same task.

• See wiki.jvmlangsummit.com/images/0/04/Theodorou-Faster-Groovy-1.8.pdf

• Better caching, optimizations, etc.

• Groovy may need lots of memory.

• MetaClass in particular needs lots of memory to cache.

• Groovy startup time needs improvement.

• New syntax, default typing, closures, … takes sometime (a lot?) to get use to.

• Use as much as you like

• Remember most of regular Java works in Groovy

• Documentation is thin but improving

• And you have to have Java docs and Groovy docs.

• Knowledge of Java is imperative.

Page 17: Groovy Tutorial

An Intertech Course

Doin’ Groovy

Groovy Tools and Setup

Page 18: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 18

What you need to do Groovy

• Install Java 1.4 or better.

• JAVA_HOME environment variable set to the location of your JDK installation.

• Download latest Groovy (“GDK”)

• From groovy.codehaus.org/Download

• Either in ZIP or installer form.

• Optionally download the documentation.

• Set an environment variable GROOVY_HOME

• To the location where you unzipped the distribution zip file.

• Include GROOVY_HOME/bin in your PATH.

• Optionally, a Groovy IDE is nice.

• Get the Eclipse plugin (groovy.codehaus.org/Eclipse+Plugin)

• Point your Eclipse IDE to http://dist.springsource.org/release/GRECLIPSE/e3.7/

Page 19: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 19

Groovy Tools

• groovysh

• command-line shell

• Used to execute Groovy code interactively.

• Allows you to enter statements or whole scripts.

• There are executed “on the fly.”

Page 20: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 20

Groovy Tools (continued)

• groovyconsole

• Swing interface that acts as a minimal Groovy development editor.

• Execute Groovy code interactively.

• It can load and run Groovy script files.

Page 21: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 21

Groovy Tools (continued)

• groovy

• The processor that executes Groovy programs and scripts.

• It can even be used to test simple Groovy expressions

Page 22: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 22

Groovy Tools (continued)

• groovyc

• Examples so far show Groovy running in “direct mode.”

• Code is not interpreted, but no executable files are created.

• The .class is generated and kept in memory before executing.

• groovyc produces “normal” JVM bytecode .class files.

Page 23: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 23

Running Groovy in Java

• Yes you can run a compiled Groovy class/script in Java.

• Identical to running a compiled Java program.

• Just add the embeddable groovy-all-*.jar file to your JVM's classpath.

• It provides all of Groovy's third-party dependencies.

Page 24: Groovy Tutorial

An Intertech Course

Some Groovy Features

What I can show in 30 minutes

(or whatever time is left)

“Programming is like sex. One mistake and you have to support it for the rest

of your life.”

~Michael Sinz

Page 25: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 25

Groovy Basics

• Groovy classes and/or scripts are usually stored in .groovy files.

• They don’t have to be, but this is the convention.

• It’s a convention that provides some conveniences.

• Not everything has to be a class (or in a class).

• Scripts contain Groovy statements without an enclosing class declaration.

• Scripts can even contain method definitions outside of class definitions to better structure the code.

• Access modifiers are optional.

• Everything is public by default.

• Imports are optional.

• Exception handling optional.

Page 26: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 26

Groovy Basics (continued)

• Many “normal” Java syntax structures are often optional; such as…

• Semicolons ending lines of code.

• Parenthesis for method calls.

• Return statements.

• Usually, you only add them for clarity/readability.

• Everything is an object (descending from java.lang.Object).

• Groovy determines the type by default if you aren’t explicit.

• Example:

def i = 4

• i will be of type java.lang.Integer

• There are 3 types of “strings” in Groovy

• Makes dealing with regex and backslash strings (URL, files, etc.) much easier

Page 27: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 27

Groovy Script

• Class structure not required

• Put this code in a .groovy file just the same.

• Execute it with Groovy tools or JVM directly

def fileName = /c:\groovytests\4score.txt/

def address = new File("$fileName")

if (address.exists()){

address.eachLine {line ->

println line.toUpperCase()

}

} else

println 'File does not exist'

Page 28: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 28

Java Class

public class Address {

private int houseNumber;

private String street;

private String city;

private String state;

private int zip;

public int getHouseNumber() {

return houseNumber;

}

public void setHouseNumber(int houseNumber) {

this.houseNumber = houseNumber;

}

public String getStreet() {

return street;

}

public void setStreet(String street) {

this.street = street;

}

public String getCity() {

return city;

}

public void setCity(String city) {

this.city = city;

}

public String getState() {

return state;

}

public void setState(String state) {

this.state = state;

}

public int getZip() {

return zip;

}

public void setZip(int zip) {

this.zip = zip;

}

public String toString() {

return houseNumber + " " + street + "\n" +

city + ", " + state + " “ + zip;

}

}

Page 29: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 29

Groovy Class

public class Address {

private int houseNumber;

private String street;

private String city;

private String state;

private int zip;

public int getHouseNumber() {

return houseNumber;

}

public void setHouseNumber(int houseNumber) {

this.houseNumber = houseNumber;

}

public String getStreet() {

return street;

}

public void setStreet(String street) {

this.street = street;

}

public String getCity() {

return city;

}

public void setCity(String city) {

this.city = city;

}

public String getState() {

return state;

}

public void setState(String state) {

this.state = state;

}

public int getZip() {

return zip;

}

public void setZip(int zip) {

this.zip = zip;

}

public String toString() {

return houseNumber + " " + street + "\n" +

city + ", " + state + " “ + zip;

}

}

Page 30: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 30

A Better Groovy Class

class Address {

private int houseNumber

private String street

private String city

private String state

private int zip

int getHouseNumber() {

houseNumber

}

void setHouseNumber(int houseNumber) {

this.houseNumber = houseNumber

}

String getStreet() {

street

}

void setStreet(String street) {

this.street = street

}

String getCity() {

city

}

void setCity(String city) {

this.city = city

}

String getState() {

state

}

void setState(String state) {

this.state = state

}

int getZip() {

zip

}

void setZip(int zip) {

this.zip = zip

}

String toString() {

houseNumber + " " + street + "\n" +

city + ", " + state + " “ + zip

}

}

Page 31: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 31

A Real Groovy Class

import groovy.transform.ToString;

@ToString

class Address {

int houseNumber

String street

String city

String state

int zip

}

Page 32: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 32

GroovyBeans

• JavaBean defined in Groovy.

• Ordinary JavaBeans with exposed properties.

• Similar to .NET properties

• The getters/setters are autogenerated.

• For public/protected fields.

• Purpose: simplify and make code more concise.

import groovy.transform.ToString

@ToString

class Customer {

String first

String last

Date dob

int children

}

def c = new Customer()

c.first = 'Jim'

c.last = 'White'

c.dob = new Date()

println c

Customer(Jim, White, Fri May 25

15:14:07 CDT 2012, 0)

A more Groovy way

def c = new Customer(first:'Jim', last:'White',dob:new Date())println c

Page 33: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 33

Optional Typing (not dynamic)

• It’s not dynamic typing!

• Groovy types are NOT DYNAMIC

• They NEVER CHANGE

• Groovy is type-safe at runtime

• Groovy offers explicit typing.

• Just as you do in Java.

• “def” is used to indicate no type is specified.

• “Groovy, you figure it out at runtime.”

• Groovy infers type by the value.

• Where it can’t infer, it uses java.lang.Object.

int x = 5; // explicit typing

def y = 5; // implicit typing to java.lang.Integer

Integer z = 5;

z = new Object(); //GroovyCastException

Page 34: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 34

Ranges

• Ranges are objects in Groovy.

• They represent a sequence of values with upper and lower bound.

• Use .. between bounds

• Optional < for right bound (half exclusive range)

class Person {

int age

Person(int age) {

this.age = age

}

}

def ageRange = 0..120

def p = new Person(30)

assert p.age in ageRange

def today = new Date();

def nextWeek = today + 7

def thisWeek = today..nextWeek

assert (today - 1 in thisWeek) == false

Page 35: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 35

List/Maps

• The array syntax can be used to define Lists and Maps.

• Maps are expressed as List with “:” separating keys/values

def myMap = [1:'Jim', 2:'Kelly']

• Allows indexing out of current bounds.

• All sorts of new methods and operators.

def mishmash = ['a', 42, new Date(), 5.5f, true]

System.out.println(mishmash.getClass())

for (Object obj : mishmash) {

System.out.println(obj.getClass())

}

assert 5.5f in mishmash

class java.util.ArrayList

class java.lang.String

class java.lang.Integer

class java.util.Date

class java.lang.Float

class java.lang.Boolean

More Groovy way

def mishmash = ['a', 42, new Date(), 5.5f, true]println mishmash.classmishmash.each {println it.class}

assert 5.5f in mishmash

Page 36: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 36

Closures

• A piece of code wrapped as a object.

• Acts like a method.

• Takes parameters.

• Returns a value.

• You can pass a reference to it around, just like an object.

• Recognized as a list of statements within curly braces

• Like a Java code block.

• It optionally has a list of identifiers in order to name the parameters passed to it.

• An arrow (->) marking the end of the parameter list.

• If the closure needs a single parameter, “it” is the default parameter name

• So you don't need to declare it specifically before ->

• BTW: closures are coming to Java

• Java 8

Page 37: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 37

Closures (continued)

• Closure is a type in Groovy.

• Syntax

{ <params> ->

//code block

}

def myClosure =

{a, b, c ->

println a

println b

println c

def x = a + b + c

println x

}

myClosure(3, 6, 8)

3

6

8

17

Page 38: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 38

Closures (continued)

• There are many closures already built in.

• Remember, “it” refers to the single parameter by default.

• Some methods and closures take closures as parameters!

• Like eachLine here.

new File('myfile.txt').eachLine { println it }

Page 39: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 39

Operator Overloading/Overriding

• In Groovy, operators are assigned to methods.

• Examples

• To overload the operator for your object…

• just provide the appropriate method in your class.

@ToString

class Address {

int houseNumber

String street

String city

String state

int zip

void plus(int i){

houseNumber = houseNumber + i

}

}

def a = new Address(city:'Portville',

state:'NY',zip:14770,street:'Elm',houseNumber:17)

a+2

println a

Address(19, Elm, Portville, NY, 14770)

Operator Method

a+b a.plus(b)

a-b a.minus(b)

a<==>b a.compareTo(b)

Page 40: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 40

For Loops

• Did Java’s for each loop ever make sense?ArrayList list = new ArrayList();

for (Object obj : list) {

// body

}

• Groovy attempts to simplify.for (variable in iterable ) {

// body

}

// in Java

List<String> list = new ArrayList<String>();

list.add(Jim");

list.add("Kelly");

list.add("Seamus");

StringBuffer buffer;

for (String str : list) {

buffer = new StringBuffer(str);

System.out.println(buffer.reverse());

}

// in Groovy

def list =['Jim','Kelly','Seamus']

for (ea in list){

println ea.reverse();

}

miJ

ylleK

sumaeS

Actually a more Groovy way wouldn’t use for

(with Closure)

def list =['Jim','Kelly','Seamus']list.each {println it.reverse()}

Page 41: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 41

Multiple String Literals

• Groovy has many string literal types.

• Single quoted: same as Java string literals.

• Double quoted: a GString

• Unescaped $ placeholders are replaced.

• Triple quoted: multiline string literal.

• Whitespace is preserved.

• Placeholders are replaced.

• “Slashy” strings: allows strings with backslashes.

• Placeholders are replaced.

def name = 'White'

String w = 'Jim $name'

String x = "Jim $name"

String y = """Jim

'is cool'

$name"""

String z = /Jim \the man\ $name/

println w

println x

println y

println z

Jim $name

Jim White

Jim

'is cool'

White

Jim \the man\ White

Page 42: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 42

Regex

• Regular expressions are usually prominent in scripting languages.

• And so they are too in Groovy.

• Groovy relies on Java’s regex support.

• Groovy has 3 operators to work with regex’s.

• =~ find

• ==~ match

• ~String pattern

• Usually used with Slashy strings because of ”\” in regex’s.

Page 43: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 43

4score.txt1. Four score and seven years ago our fathers brought forth on this continent a new nation, conceived in liberty, and dedicated to the

proposition that all men are created equal.

2. Now we are engaged in a great civil war, testing whether that nation, or any nation, so conceived and so dedicated, can long endure.

3. We are met on a great battle-field of that war.

4. We have come to dedicate a portion of that field, as a final resting place for those who here gave their lives that that nation might live.

5. It is altogether fitting and proper that we should do this.

6. But, in a larger sense, we can not dedicate, we can not consecrate, we can not hallow this ground.

7. The brave men, living and dead, who struggled here, have consecrated it, far above our poor power to add or detract.

8. The world will little note, nor long remember what we say here, but it can never forget what they did here.

9. It is for us the living, rather, to be dedicated here to the unfinished work which they who fought here have thus far so nobly advanced.

10. It is rather for us to be here dedicated to the great task remaining before us—that from these honored dead we take increased devotion to that cause for which they gave the last full measure of devotion—that we here highly resolve that these dead shall not have died in vain—that this nation, under God, shall have a new birth of freedom—and that government of the people, by the people, for the people, shall not perish from the earth.

Page 44: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 44

Regex

def fileName = /c:\groovytests\4score.txt/

def address = new File("$fileName")

// count the number of "we" in each line in GA

address.eachLine {line ->

java.util.regex.Matcher matcher = line =~ /we/

println matcher.count

}

// fine lines containing the word "nation“ in GA

address.eachLine {line ->

println line ==~ /^.*nation.*$/

}

// find four letter word in the food list

def fourLetterWordPattern = ~/\w{4}/

def myWords = ['beer','cheese','Coke','Pepsi',

'pizza','meat','corn','brocolli']

println myWords.grep(fourLetterWordPattern)

0

1

0

0

1

3

1

1

0

2

true

true

false

true

false

false

false

false

false

true

[beer, Coke, meat, corn]

Page 45: Groovy Tutorial

An Intertech Course

Behind the Scenes

Groovy Architecture

Page 46: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 46

The Meta Object Protocol (MOP)

• MOP is the secret sauce of Groovy’s dynamic behavior.

• Put simply, whenever Groovy calls a method it doesn't call it directly.

• An intermediate layer calls the method on its behalf.

• The intermediate layer provides hooks that allow other behavior.

InvokerHelper.invokeMethod(this, “aMethod”, {parameterA, parameterB,

…});

InvokerHelper.invokeMethod(this, “println”, {“Hello World”});

• Groovy maintains a meta class (of type MetaClass) for every class loaded.

• This meta class maintains the collection of all methods/properties in the class.

• Allows adding additional methods/props that Groovy knows about.

• Allowing the invoker to call on either Java or Groovy methods/props.

Page 47: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 47

JVM

aMethod(‘Hello World’,43)

Invoker Helper

Meta

Class

Your Bean

Page 48: Groovy Tutorial

An Intertech Course

Miscellaneous

Other Stuff to Know When Starting

Page 49: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 49

Groovy Ecosystem

• Grails

• Web application framework (based on Rails)

• Gradle

• Advanced build automation based on Ant, Maven

• Griffon

• Inspired by Grails, an application framework for developing desktop applications

• Spock

• Inspired by JUnit, jMock, a testing and specification framework

• Gaelyk

• A lightweight Groovy toolkit for Google App Engine Java

• And many more

• See http://groovy.codehaus.org/Modules

Page 50: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 50

How to proceed with Groovy?

• Get it! Explore it!

• I think you’ll find it hard to deny the potential power.

• Try it out for small needs – especially scripting, unit testing, etc.

• Since it can be added on top of Java, allow developers to adopt slowly.

• It can be an option, not a requirement.

• Allow confidence in it to build/spread.

• Work it into modules that make most sense.

• I/O processing

• XML processing

• List/Map processing

• Watch for potential performance issues.

• If you like it…

• Try it on a RAD prototype project – see if the productivity gains are real.

• Expand to Grails, Griffon, etc. as needed.

Page 51: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 51

Summary

• Groovy is a dynamic language that is symbiotic with Java.

• Groovy improves developer productivity.

• Groovy offers many features not found in Java to include: closures, optional typing, operator overloading, syntax simplicity, …

• To do Groovy you need Java, the GDK, and optionally a Groovy-aware IDE.

• The Meta Object Protocol provides Groovy its dynamic behavior.

• Groovy has a healthy ecosystem. Frameworks for web development, builds, testing, etc. exist.

• There are potential issues with Groovy to include potential performance issues.

• You can begin slowly with Groovy. Add it where it makes sense, provides assistance, and builds confidence.

Page 52: Groovy Tutorial

Intertech

Copyright © Intertech, Inc. 2012 • http://www.Intertech.com • 800-866-9884 • Slide 52

Associated Courses and Resources

Free Book Chapter: Spring Web

• Complete Groovy Training

• Intertech Article on Groovy

Page 53: Groovy Tutorial

Course Name

Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 53

Thank You!

Jim White

Intertech, Inc.

651-288-7000

[email protected]

Slides and code will be available on our web site (also emailed to those that signed up)