groovy for java programmers - qcon san franciscogroovy for java programmers qconsf 2010 jeff brown...

47
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/

Upload: others

Post on 28-May-2020

37 views

Category:

Documents


2 download

TRANSCRIPT

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/

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

–Python–Ruby–Smalltalk

2

What Is Groovy?

• 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

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

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

4

Installing Groovy

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

5

Groovy Tools

$ 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

7

groovysh

8

groovyConsole

9

more on Groovy properties later...

Groovy Class

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

10

Groovy Scripts

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

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

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

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

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

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

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

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

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

Lets Go Meta...

// PrintIndependenceDay.groovy

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

20

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

22

Everything Is An Object

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

–may contain embedded Groovy code

23

Groovy Strings

• Strings May Be Referenced Using [ ]

24

Groovy Strings

• 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

26

Groovy List

27

Groovy Maps

• Groovy Beans / POGOs• Similar To POJOs

– ...but groovier–eliminates boilerplate code

28

Groovy Beans

29

POJO

30

POJO

• 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

• Groovy Beans Eliminate All Of The Boilerplate Code

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

32

Groovy Beans

33

Groovy Beans

• Property Access Looks Like Field Access

34

Groovy Beans

35

Groovy Beans

• 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

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

Argument

37

Closures

38

Closures

• Closures May Declare An Argument List

39

the times method is passing an argument into the closure

Closures

• The Implicit 'it' Argument

40

Closures

• Closures May Accept Multiple Arguments

41

Closures

• Closures Simplify Collection Iteration

42

Closures

43

Closures

44

Closures

• 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

46

MarkupBuilder

Q & A

47