An Intertech Course
Groovy Tutorial
Intertech Inc.
Intertech
Copyright © Intertech, Inc. 2012 • http://www.Intertech.com • 800-866-9884 • Slide 2
Intertech
Instructors Who C...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 3
Agenda
• Java vs. Groovy (and yes <sigh...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 4
Who is this guy?
• Jim White – jwhite@i...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 5
Audience check, warnings, caveats, etc....
An Intertech Course
Examples of Groovy at a High Level
How does it compare to Java?
"Always program as if the person who w...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 7
Groovy v. Java - a first look
• What if...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 8
For those that really want Hello World ...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 9
What is Groovy?
• It was created in 200...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 10
JVM
Groovy and Java are Symbiotic
• Gr...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 11
Cross Language Integration Ladder
• A ...
An Intertech Course
Why Groovy
A Case for Using Groovy
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 13
Why Groovy?
• Productivity
• More conc...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 14
Groovy Features (not found in Java)
• ...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 15
Falsities
• Groovy is just for scripti...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 16
Groovy Issues
• Groovy can be slow(er)...
An Intertech Course
Doin’ Groovy
Groovy Tools and Setup
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 18
What you need to do Groovy
• Install J...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 19
Groovy Tools
• groovysh
• command-line...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 20
Groovy Tools (continued)
• groovyconso...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 21
Groovy Tools (continued)
• groovy
• Th...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 22
Groovy Tools (continued)
• groovyc
• E...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 23
Running Groovy in Java
• Yes you can r...
An Intertech Course
Some Groovy Features
What I can show in 30 minutes
(or whatever time is left)
“Programming is like sex...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 25
Groovy Basics
• Groovy classes and/or ...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 26
Groovy Basics (continued)
• Many “norm...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 27
Groovy Script
• Class structure not re...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 28
Java Class
public class Address {
priv...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 29
Groovy Class
public class Address {
pr...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 30
A Better Groovy Class
class Address {
...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 31
A Real Groovy Class
import groovy.tran...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 32
GroovyBeans
• JavaBean defined in Groo...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 33
Optional Typing (not dynamic)
• It’s n...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 34
Ranges
• Ranges are objects in Groovy....
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 35
List/Maps
• The array syntax can be us...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 36
Closures
• A piece of code wrapped as ...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 37
Closures (continued)
• Closure is a ty...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 38
Closures (continued)
• There are many ...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 39
Operator Overloading/Overriding
• In G...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 40
For Loops
• Did Java’s for each loop e...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 41
Multiple String Literals
• Groovy has ...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 42
Regex
• Regular expressions are usuall...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 43
4score.txt
1. Four score and seven yea...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 44
Regex
def fileName = /c:groovytests4sc...
An Intertech Course
Behind the Scenes
Groovy Architecture
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 46
The Meta Object Protocol (MOP)
• MOP i...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 47
JVM
aMethod(‘Hello World’,43)
Invoker ...
An Intertech Course
Miscellaneous
Other Stuff to Know When Starting
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 49
Groovy Ecosystem
• Grails
• Web applic...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 50
How to proceed with Groovy?
• Get it! ...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 51
Summary
• Groovy is a dynamic language...
Intertech
Copyright © Intertech, Inc. 2012 • http://www.Intertech.com • 800-866-9884 • Slide 52
Associated Courses and Res...
Course Name
Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 53
Thank You!
Jim White
Intertech, Inc.
6...
Upcoming SlideShare
Loading in …5
×

Groovy Tutorial

3,255 views

Published on

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.

Published in: Software, Technology

Groovy Tutorial

  1. 1. An Intertech Course Groovy Tutorial Intertech Inc.
  2. 2. Intertech Copyright © Intertech, Inc. 2012 • http://www.Intertech.com • 800-866-9884 • Slide 2 Intertech Instructors 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.
  3. 3. 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.
  4. 4. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 4 Who is this guy? • Jim White – jwhite@intertech.com • 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!
  5. 5. 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.
  6. 6. 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
  7. 7. 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
  8. 8. 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!?
  9. 9. 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).
  10. 10. 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
  11. 11. 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
  12. 12. An Intertech Course Why Groovy A Case for Using Groovy
  13. 13. 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
  14. 14. 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…
  15. 15. 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.
  16. 16. 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.
  17. 17. An Intertech Course Doin’ Groovy Groovy Tools and Setup
  18. 18. 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/
  19. 19. 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.”
  20. 20. 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.
  21. 21. 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
  22. 22. 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.
  23. 23. 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.
  24. 24. 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
  25. 25. 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.
  26. 26. 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
  27. 27. 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:groovytests4score.txt/ def address = new File("$fileName") if (address.exists()){ address.eachLine {line -> println line.toUpperCase() } } else println 'File does not exist'
  28. 28. 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; } }
  29. 29. 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; } }
  30. 30. 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 } }
  31. 31. 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 }
  32. 32. 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
  33. 33. 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
  34. 34. 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
  35. 35. 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.class mishmash.each {println it.class} assert 5.5f in mishmash
  36. 36. 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
  37. 37. 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
  38. 38. 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 }
  39. 39. 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)
  40. 40. 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()}
  41. 41. 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
  42. 42. 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.
  43. 43. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 43 4score.txt 1. 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.
  44. 44. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 44 Regex def fileName = /c:groovytests4score.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]
  45. 45. An Intertech Course Behind the Scenes Groovy Architecture
  46. 46. 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.
  47. 47. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 47 JVM aMethod(‘Hello World’,43) Invoker Helper Meta Class Your Bean
  48. 48. An Intertech Course Miscellaneous Other Stuff to Know When Starting
  49. 49. 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
  50. 50. 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.
  51. 51. 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.
  52. 52. 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
  53. 53. Course Name Copyright © Intertech, Inc. • www.Intertech.com • 800-866-9884 Slide 53 Thank You! Jim White Intertech, Inc. 651-288-7000 jwhite@intertech.com Slides and code will be available on our web site (also emailed to those that signed up)

×