Top Banner
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. Groovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer [email protected] SpringSource - A Division Of VMware http://springsource.com/
47

Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer [email protected] SpringSource - A Division Of VMware

May 28, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Groovy For Java Programmers

QCONSF 2010

Jeff BrownCore Grails Developer

[email protected] - A Division Of VMware

http://springsource.com/

Page 2: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

• Agile Dynamic Language For The JVM• Inspired By Languages Such As...

–Python–Ruby–Smalltalk

2

What Is Groovy?

Page 3: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

• Powerful Dynamic Language• Relatively Easy To Learn• Familiar Syntax For Java Programmers• Integrates Really Well With Java

–Containers, Libraries, Existing Java Code

3

Why Groovy

Page 4: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

• Download Latest Release–http://groovy.codehaus.org/

• Extract Archive• Set $GROOVY_HOME• Add $GROOVY_HOME/bin to PATH

4

Installing Groovy

Page 5: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

• groovy - Interpreter• groovyc - Compiler• groovysh - Shell• groovyConsole - Swing Console

5

Groovy Tools

Page 6: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

$ groovy -versionGroovy Version: 1.5.4 JVM: 1.5.0_13-119

$ groovy -e "println 'Groovy Rocks.'"Groovy Rocks.

$ groovy -e "x=5; y=10; z=x*y; println z"50

6

Give It A Spin

Page 7: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

7

groovysh

Page 8: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

8

groovyConsole

Page 9: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

9

more on Groovy properties later...

Groovy Class

Page 10: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

• Scripts Do Not Require A Class Definition–no main method

10

Groovy Scripts

Page 11: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

Print Independence Day

// PrintIndependenceDay.java

import java.util.Calendar;import java.util.Date;

public class PrintIndependenceDay { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(Calendar.MONTH, Calendar.JULY); calendar.set(Calendar.DATE, 4); calendar.set(Calendar.YEAR, 1776); Date time = calendar.getTime(); System.out.println(time); }}

11

Page 12: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

Print Independence Day

// PrintIndependenceDay.groovy

import java.util.Calendar;import java.util.Date;

public class PrintIndependenceDay { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(Calendar.MONTH, Calendar.JULY); calendar.set(Calendar.DATE, 4); calendar.set(Calendar.YEAR, 1776); Date time = calendar.getTime(); System.out.println(time); }}

12

Page 13: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

No Utility Imports...

// PrintIndependenceDay.groovy

public class PrintIndependenceDay { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(Calendar.MONTH, Calendar.JULY); calendar.set(Calendar.DATE, 4); calendar.set(Calendar.YEAR, 1776); Date time = calendar.getTime(); System.out.println(time); }}

13

Page 14: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

No Semicolons...

// PrintIndependenceDay.groovy

public class PrintIndependenceDay { public static void main(String[] args) { Calendar calendar = Calendar.getInstance() calendar.clear() calendar.set(Calendar.MONTH, Calendar.JULY) calendar.set(Calendar.DATE, 4) calendar.set(Calendar.YEAR, 1776) Date time = calendar.getTime() System.out.println(time) }}

14

Page 15: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

No Getters...

// PrintIndependenceDay.groovy

public class PrintIndependenceDay { public static void main(String[] args) { Calendar calendar = Calendar.instance calendar.clear() calendar.set(Calendar.MONTH, Calendar.JULY) calendar.set(Calendar.DATE, 4) calendar.set(Calendar.YEAR, 1776) Date time = calendar.time System.out.println(time) }}

15

Page 16: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

No Static Typing...

// PrintIndependenceDay.groovy

public class PrintIndependenceDay { public static void main(String[] args) { def calendar = Calendar.instance calendar.clear() calendar.set(Calendar.MONTH, Calendar.JULY) calendar.set(Calendar.DATE, 4) calendar.set(Calendar.YEAR, 1776) def time = calendar.time System.out.println(time) }}

16

Page 17: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

No System.out.blah.blah...

// PrintIndependenceDay.groovy

public class PrintIndependenceDay { public static void main(String[] args) { def calendar = Calendar.instance calendar.clear() calendar.set(Calendar.MONTH, Calendar.JULY) calendar.set(Calendar.DATE, 4) calendar.set(Calendar.YEAR, 1776) def time = calendar.time println(time) }}

17

Page 18: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

No Class...

// PrintIndependenceDay.groovy

def calendar = Calendar.instancecalendar.clear()calendar.set(Calendar.MONTH, Calendar.JULY)calendar.set(Calendar.DATE, 4)calendar.set(Calendar.YEAR, 1776)

def time = calendar.time

println(time)

18

Page 19: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

Optional Parens...

// PrintIndependenceDay.groovy

def calendar = Calendar.instancecalendar.clear()calendar.set Calendar.MONTH, Calendar.JULYcalendar.set Calendar.DATE, 4calendar.set Calendar.YEAR, 1776

def time = calendar.time

println time

19

Page 20: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

Lets Go Meta...

// PrintIndependenceDay.groovy

def calendar = Calendar.instancecalendar.with { clear() set MONTH, JULY set DATE, 4 set YEAR, 1776 println time}

20

Page 21: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

Lets Compare...

// PrintIndependenceDay.groovy

def calendar = Calendar.instancecalendar.with { clear() set MONTH, JULY set DATE, 4 set YEAR, 1776 println time}

// PrintIndependenceDay.java

import java.util.Calendar;import java.util.Date;

public class PrintIndependenceDay { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(Calendar.MONTH, Calendar.JULY); calendar.set(Calendar.DATE, 4); calendar.set(Calendar.YEAR, 1776); Date time = calendar.getTime(); System.out.println(time); }}

21

Page 22: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

22

Everything Is An Object

Page 23: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

• Single quoted Strings are java.lang.String• Double quoted Strings are "GStrings"

–may contain embedded Groovy code

23

Groovy Strings

Page 24: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

• Strings May Be Referenced Using [ ]

24

Groovy Strings

Page 25: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

• Groovy Collections Are Standard java.util.Collections

• Groovy Adds Many Useful Methods To Existing Collections

• Many Common Tasks Are Much More Simple In Groovy Compared To Java

25

Groovy Collections

Page 26: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

26

Groovy List

Page 27: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

27

Groovy Maps

Page 28: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

• Groovy Beans / POGOs• Similar To POJOs

– ...but groovier–eliminates boilerplate code

28

Groovy Beans

Page 29: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

29

POJO

Page 30: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

30

POJO

Page 31: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

• Modern Java IDEs Generate Most Of That Code–developer declares fields– IDE generates constructors– IDE generates getters/setters

31

If the IDE can generate all of that code, why can't the compiler or the

POJO

Page 32: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

• Groovy Beans Eliminate All Of The Boilerplate Code

• No Need To Write Getters/Setters• Seldom Need To Write Constructors

32

Groovy Beans

Page 33: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

33

Groovy Beans

Page 34: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

• Property Access Looks Like Field Access

34

Groovy Beans

Page 35: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

35

Groovy Beans

Page 36: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

• A Block Of Code• May Be Passed As Arguments• May Accept Parameters• May Return A Value• Much More Powerful Than Anonymous Inner

Classes

36

Closures

Page 37: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

• Groovy Adds A 'times' Method To Number• The 'times' Method Accepts A Closure As An

Argument

37

Closures

Page 38: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

38

Closures

Page 39: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

• Closures May Declare An Argument List

39

the times method is passing an argument into the closure

Closures

Page 40: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

• The Implicit 'it' Argument

40

Closures

Page 41: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

• Closures May Accept Multiple Arguments

41

Closures

Page 42: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

• Closures Simplify Collection Iteration

42

Closures

Page 43: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

43

Closures

Page 44: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

44

Closures

Page 45: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

• Builders Are A Powerful Concept• Metaprogramming Makes Builders A Snap In

Groovy• Several Builders Are Bundled With Groovy

–SwingBuilder, MarkupBuilder, etc...

• You Can Write Your Own

45

Builders

Page 46: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

46

MarkupBuilder

Page 47: Groovy For Java Programmers - QCon San FranciscoGroovy For Java Programmers QCONSF 2010 Jeff Brown Core Grails Developer jeff.brown@springsource.com SpringSource - A Division Of VMware

Q & A

47