The Buzz About Groovy and Grails




        Presented at

The Chicago Groovy User Group

       by Eric Weimer

      on ...
Bio

• Eric B. Weimer
   • 26 years developing software
   • 10 years with Java stack
   • Redpoint Technologies (sponsor)...
Objectives

This talk is a presentation of my research. It will
  answer the following questions:

•   What is Groovy?
•  ...
Groovy Defined

Groovy:
• Is a general purpose programming language
• Is a superset of Java syntax
• Fully Object-Orientat...
Grails Defined

Grails:
• Is a web application framework
• Is “full stack”
• Runs on Groovy
• One of many Groovy framework...
Putting it all together


      Groovy

             runs on

 Java Object Model

             runs on

Java Virtual Machi...
Putting it all together


      Groovy

             compiles to

     Bytecode

             runs on

Java Virtual Machin...
Putting it all together


                Frameworks

Grails (web                Griffon (Swing
applications)             ...
History of computing languages

The first programs looked like this:

0010   1101   0101   1100    0100   1011   0100   10...
Historical Documents
Early Russian Programmers
Programming was quite lucrative
How do I install Groovy and Grails


Easy:
• Download and unzip Groovy and Grails
• Set GROOVY_HOME, GRAILS_HOME
• Add %GR...
Groovy Buzz Words

•   Groovy Truth
•   Duck Typing
•   Syntactic Sugar
•   Fully Object Orientated
•   Closures
•   Dynam...
Groovy Truth

How Groovy handles boolean comparisons
•Groovy supports the standard conditional operators on
boolean expres...
Groovy Truth

Examples:

def obj = null;
if ( obj ) …

obj = new Person()
if ( obj ) …

def numSnakes = 0
if ( numSnakes )...
Duck Typing

If it looks like a duck and quacks like a duck, …

def identity = new Identity()
…
identity = new Person()
…
...
Syntactic Sugar

Syntactic Sugar
•An alternative syntax
•More concise
•Improved clarity
•Improves productivity
•Syntactic ...
Syntactic Sugar
// Semicolons are only required when necessary:
String friend = „Matt‟

// Parentheses are optional
printl...
Syntactic Sugar
// Class variables are private by default in Groovy.
// Groovy generates the getters and setters for you:
...
Syntactic Sugar

// Groovy makes great use of the dot operator.
//
// Consider a web page. Groovy supports syntax for navi...
Syntactic Sugar

// Groovy supports the Java for loop:

for (int i = 0; i < 10; i++) { … }

// However a “sweeter” version...
Syntactic Sugar


// constructor sweetness
def person = new Person(
   firstName: quot;Ericquot;,
   lastName: quot;Weimer...
Syntactic Sugar

//Define an ArrayList:
def petList = [„Rocket‟,‟Portia‟,‟Cleo‟,‟Java‟]

// Define a HashMap
def employeeC...
Fully Object Orientated

// Common Java bug

public boolean sameName (String aName) {
  String name = “Matt”;
  return nam...
Fully Object Orientated

Java primitives (int, short, long, double, char, etc.)

•   In Java, operators only make sense fo...
Groovy Operators

Groovy Comparison Operators
Operator  Method
a == b    a.equals(b)
a>b       a.compareTo(b) > 0
a >= b  ...
Groovy Math-like operators
Groovy Math-like operators
Operator         Method
a+b              a.plus(b)
a-b              ...
Fully Object Orientated



// Groovy version works as expected!
public Boolean sameName (String aName)
  {
String name = “...
Closures


• A closure in Groovy is an object
•   Java has syntax for strings: String x=“eric”;
•   Groovy contains a synt...
Closures



// A trivial example:
public void printList(List a) {
   def pl = {println it}
   a.each (pl)
}
Closures in Grails


class   ItemController {
  def   save = { …
  }
  def   search = { …
  }
  def   get = {
  }
}
Dynamic Objects

• You can add methods and properties to classes
  or objects.
• You can intercept method calls.
• Many ex...
Mixins


Add methods to ANY class at runtime (even Java final).

// Assume you‟ve defined methods wordCount,
charCount:

F...
Meta Object Protocol

Metaprogramming

Metaclasses represent the runtime behavior of your
classes and instances. Available...
Meta Object Protocol

Metaprogramming

Metaclasses can add properties:

File.metaClass.getWordCount = {
      delegate.tex...
There is much more to Groovy


•   Builders
•   DSL
•   Swing support (Griffon)
•   Template framework
•   Groovy Server P...
Grails – what is it?


• Grails is a modern, full stack web application
  framework in a box
• Grails is built in Spring a...
Grails – what is it?


• A full stack web framework built on Groovy
• Leverages proven industry standards like Spring
  an...
Groovy Myths

•   Groovy is a scripting language
•   Sun favors JRuby over Groovy
•   Groovy is slow and full of bugs
•   ...
Barriers to entry

Approval to use a new language can be difficult.
• Some shops require an elaborate process to
  approve...
In conclusion
How compelling are Groovy and Grails?
• Production ready
• Improves developer productivity
• Reduces bugs
• ...
Recommended Reading

For beginners without Rails or Django experience:

Beginning Groovy and Grails: From Novice to Profes...
In conclusion



       You can find these slides on my blog at:
            ericbweimer.blogspot.com

                   ...
Upcoming SlideShare
Loading in...5
×

Groovy And Grails Introduction

2,676

Published on

Groovy and Grails Introduction

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,676
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
53
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Groovy And Grails Introduction

  1. 1. The Buzz About Groovy and Grails Presented at The Chicago Groovy User Group by Eric Weimer on March 10, 2009
  2. 2. Bio • Eric B. Weimer • 26 years developing software • 10 years with Java stack • Redpoint Technologies (sponsor) • Roles • Developer • Independent consultant • Application Architect • Project/Program Manager • Director Level • Approach • Fun and Agile • “Life is a banquet”
  3. 3. Objectives This talk is a presentation of my research. It will answer the following questions: • What is Groovy? • What is Grails? • What do they mean to Java developers? • What do they mean to IT managers? • Hidden secrets such as “how do I get first class plane tickets for the price of coach?”
  4. 4. Groovy Defined Groovy: • Is a general purpose programming language • Is a superset of Java syntax • Fully Object-Orientated (no primitives!) • Provides many “next generation” features from Smalltalk, Python, Ruby and others. • Designed to improve productivity • Has become wildly popular
  5. 5. Grails Defined Grails: • Is a web application framework • Is “full stack” • Runs on Groovy • One of many Groovy frameworks available • Wildly popular • Leverages Rails‟ Convention over Configuration • Leverages Closures
  6. 6. Putting it all together Groovy runs on Java Object Model runs on Java Virtual Machine 6
  7. 7. Putting it all together Groovy compiles to Bytecode runs on Java Virtual Machine 7
  8. 8. Putting it all together Frameworks Grails (web Griffon (Swing applications) applications) Groovy 8
  9. 9. History of computing languages The first programs looked like this: 0010 1101 0101 1100 0100 1011 0100 1010 1011 1100 0110 1110 0001 0000 0101 0011 0010 1111 0111 0011 0101 0011 0100 1111 0001 1000 0110 0101 1011 1100 0010 1101 0101 1100 0100 1011 0100 1010 0111 0011 0110 1110 0001 0000 0101 0011 0010 1111 1011 1100 0101 0011 0100 1111 0001 1000 0110 0101 0111 0011 0010 1101 0101 1100 0100 1011 0100 1010 1011 1100 0110 1110 0001 0000 0101 0011 0010 1111 0111 0011 0101 0011 0100 1111 0001 1000 0110 0101 1011 1100 0010 1101 0101 1100 0100 1011 0100 1010 0111 0011 0110 1110 0001 0000 0101 0011 0010 1111 1011 1100 0101 0011 0100 1111 0001 1000 0110 0101 0111 0011
  10. 10. Historical Documents
  11. 11. Early Russian Programmers
  12. 12. Programming was quite lucrative
  13. 13. How do I install Groovy and Grails Easy: • Download and unzip Groovy and Grails • Set GROOVY_HOME, GRAILS_HOME • Add %GROOVY_HOME%/bin to Path • Add %GRAILS_HOME%/bin to Path Optional: • Install your IDE‟s Groovy plugin
  14. 14. Groovy Buzz Words • Groovy Truth • Duck Typing • Syntactic Sugar • Fully Object Orientated • Closures • Dynamic Objects • Mixins • Meta Object Protocol • And more…
  15. 15. Groovy Truth How Groovy handles boolean comparisons •Groovy supports the standard conditional operators on boolean expressions •In addition, Groovy has special rules for coercing non- boolean objects to a boolean value. •Empty collections are false, non-empty are true. •Empty maps are false, non-empty are true. •Null object references are false, non-null are true. •Non-zero numbers are true.
  16. 16. Groovy Truth Examples: def obj = null; if ( obj ) … obj = new Person() if ( obj ) … def numSnakes = 0 if ( numSnakes ) …
  17. 17. Duck Typing If it looks like a duck and quacks like a duck, … def identity = new Identity() … identity = new Person() … identity = “Eric”
  18. 18. Syntactic Sugar Syntactic Sugar •An alternative syntax •More concise •Improved clarity •Improves productivity •Syntactic sugar usually provides no additional functionality
  19. 19. Syntactic Sugar // Semicolons are only required when necessary: String friend = „Matt‟ // Parentheses are optional println “eric has ${numDogs}‟s dogs” // Except when the compiler cannot tell: person.save(); children.save() // return is optional
  20. 20. Syntactic Sugar // Class variables are private by default in Groovy. // Groovy generates the getters and setters for you: class Person { String firstName String lastName } // In Groovy these are the same: String firstName = p.getLastName( ) String firstName = p.lastName
  21. 21. Syntactic Sugar // Groovy makes great use of the dot operator. // // Consider a web page. Groovy supports syntax for navigating // hierarchical structures with Groovy Builders: def page = DomBuilder( … ) // Get all the anchors in a page List anchors = page.html.body.‟**‟.a
  22. 22. Syntactic Sugar // Groovy supports the Java for loop: for (int i = 0; i < 10; i++) { … } // However a “sweeter” version of this is (0..9).each { … } // Or just 10.times { … }
  23. 23. Syntactic Sugar // constructor sweetness def person = new Person( firstName: quot;Ericquot;, lastName: quot;Weimerquot;, address: new Address( addressLine1: quot;101 Main Streetquot;, city: quot;Lislequot;, zipCode: quot;60532quot;) )
  24. 24. Syntactic Sugar //Define an ArrayList: def petList = [„Rocket‟,‟Portia‟,‟Cleo‟,‟Java‟] // Define a HashMap def employeeCellPhoneMap = [Karl: „847-699-3222‟, Emelye: „630-605-4355‟, Natalie: „312-555-1234‟]
  25. 25. Fully Object Orientated // Common Java bug public boolean sameName (String aName) { String name = “Matt”; return name == aName; } … boolean b = sameName(“Matt”);
  26. 26. Fully Object Orientated Java primitives (int, short, long, double, char, etc.) • In Java, operators only make sense for primitives • What to do with comparison operators? (==, >, <, ...) • Answer: Make them work for objects • Via operator overloading! • But isn‟t operator overloading a bad thing? • Not unless it is abused… • Groovy makes it intuitive
  27. 27. Groovy Operators Groovy Comparison Operators Operator Method a == b a.equals(b) a>b a.compareTo(b) > 0 a >= b a.compareTo(b) >= 0 a<b a.compareTo(b) < 0 a <= b a.compareTo(b) <= 0
  28. 28. Groovy Math-like operators Groovy Math-like operators Operator Method a+b a.plus(b) a-b a.minus(b) a*b a.multiply(b) a/b a.divide(b) a++ or ++a a.next() a-- or --a a.previous() a << b a.leftShift(b) Array Operators Operator Method a[b] a.getAt(b) a[b] = c a.putAt(b, c)
  29. 29. Fully Object Orientated // Groovy version works as expected! public Boolean sameName (String aName) { String name = “Stu” name == aName } … boolean b = sameName(“Stu”);
  30. 30. Closures • A closure in Groovy is an object • Java has syntax for strings: String x=“eric”; • Groovy contains a syntax for closures • In Groovy, a closure is defined by braces {…} • As an object, you may assign it to a variable • As an object, you may pass it to methods • It can also reference any variables in scope
  31. 31. Closures // A trivial example: public void printList(List a) { def pl = {println it} a.each (pl) }
  32. 32. Closures in Grails class ItemController { def save = { … } def search = { … } def get = { } }
  33. 33. Dynamic Objects • You can add methods and properties to classes or objects. • You can intercept method calls. • Many examples such as tracking changes to a POGO or POJO, logging, business rules, etc.
  34. 34. Mixins Add methods to ANY class at runtime (even Java final). // Assume you‟ve defined methods wordCount, charCount: File.mixin WordCount, CharCount
  35. 35. Meta Object Protocol Metaprogramming Metaclasses represent the runtime behavior of your classes and instances. Available per class and per instance. ExpandoMetaClass DSL streamlines metaclass use. Number.metaClass.multiply = { Amount amount -> amount.times(delegate) }
  36. 36. Meta Object Protocol Metaprogramming Metaclasses can add properties: File.metaClass.getWordCount = { delegate.text.split(/w/).size() } new File('myFile.txt').wordCount
  37. 37. There is much more to Groovy • Builders • DSL • Swing support (Griffon) • Template framework • Groovy Server Pages • AST transformations • Grape • JMX Builder, OSGi support, etc. etc. etc.
  38. 38. Grails – what is it? • Grails is a modern, full stack web application framework in a box • Grails is built in Spring and Hibernate • Grails comes complete with a web server, database, testing framework, automated build and logging. • Grails is not an RoR clone, it is inspired by Rails. • Best demoed by example.
  39. 39. Grails – what is it? • A full stack web framework built on Groovy • Leverages proven industry standards like Spring and Hibernate • Supports “Convention over configuration” like Rails • Makes use of closures like Rails • Not designed to be a Groovy-based Rails, but designed to be better than Rails
  40. 40. Groovy Myths • Groovy is a scripting language • Sun favors JRuby over Groovy • Groovy is slow and full of bugs • Java is sufficient for our needs • Now that SpringSource has acquired Groovy, and now that Spring favors paying customers, does that mean Groovy is destined to be closed source and require a fee?
  41. 41. Barriers to entry Approval to use a new language can be difficult. • Some shops require an elaborate process to approve a new language. • Hint: Begin with Groovy for unit testing • Hint: Use Groovy for Ant scripting • Present results of polls, statistics, etc. to show Groovy has a large community of support • Create a compelling argument for Groovy adoption • Emphasize productivity gains, competitive advantage
  42. 42. In conclusion How compelling are Groovy and Grails? • Production ready • Improves developer productivity • Reduces bugs • Eases migration for legacy Java developers • Excellent documentation • Community is growing geometrically • Mainstream community awareness through SpringSource • Widespread anecdotal evidence of the claims above • Lacks published metrics to support claims above
  43. 43. Recommended Reading For beginners without Rails or Django experience: Beginning Groovy and Grails: From Novice to Professional (Beginning from Novice to Professional) by Christopher M. Judd, Joseph Faisal Nusairat, and Jim Shingler Groovy and Grails Recipes (Recipes: a Problem-Solution Approach) by Bashar Abdul-Jawad For the experienced: Groovy in Action by Dierk Koenig, Andrew Glover, Paul King, and Guillaume Laforge Programming Groovy: Dynamic Productivity for the Java Developer (Pragmatic Programmers) by Venkat Subramaniam Groovy Recipes: Greasing the Wheels of Java (Pragmatic Programmers) by Scott Davis The Definitive Guide to Grails, Second Edition (Expert's Voice in Web Development) by Graeme Rocher and Jeff Brown
  44. 44. In conclusion You can find these slides on my blog at: ericbweimer.blogspot.com Thanks for coming! Don‟t forget to stay for the prizes donated by Redpoint.
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×