70
Stop Writing Java Start Writing Groovy Evgeny Goldin

Start Writing Groovy

Embed Size (px)

DESCRIPTION

"Start Writing Groovy, Stop Writing Java"This presentation shows the very first steps that can be taken by Java developers when switching to Groovy.

Citation preview

Page 1: Start Writing Groovy

Stop Writing JavaStart Writing Groovy

Evgeny Goldin

Page 2: Start Writing Groovy

Java => Groovy

Page 3: Start Writing Groovy
Page 4: Start Writing Groovy

equals vs. ==

Page 5: Start Writing Groovy

• Groovy runs Java .. except where it doesn’t.

• equals() / ==• == / is()• Works with nulls– assert null == null– assert null.is( null )– assert null.equals( null )

Page 6: Start Writing Groovy

Cleanups

Page 7: Start Writing Groovy

• Lose public• Lose ; and return• Lose .class• Lose getX() / setX()

Page 8: Start Writing Groovy

• Lose public• Lose ; and return• Lose .class• Lose getX() / setX()• public String className( Class c ) { return

c.getName(); }

• o.setName( className( Map.class ));

Page 9: Start Writing Groovy

• Lose public• Lose ; and return• Lose .class• Lose getX() / setX()• def className( Class c ) { c.name }• o.name = className( Map )

Page 10: Start Writing Groovy

• Lose public• Lose ; and return• Lose .class• Lose getX() / setX()• http://codenarc.sourceforge.net/• http://plugins.intellij.net/plugin/?

idea&id=5925

Page 11: Start Writing Groovy

• Lose public• Lose ; and return• Lose .class• Lose getX() / setX()• def className( Class c ) { c.name }• o.name = className( Map )• It is a big deal at the end of the day

Page 12: Start Writing Groovy

• def j = 4

Page 13: Start Writing Groovy

• def j = 4• def list = []• def list = [1, 2, 3, 4]

Page 14: Start Writing Groovy

• def j = 4• def list = []• def list = [1, 2, 3, 4]• def map = [:]• def map = [1:2, 3:4]

Page 15: Start Writing Groovy

• def j = 4• def list = []• def list = [1, 2, 3, 4]• def map = [:]• def map = [1:2, 3:4]• def array = [1, 2, 3, 4] as int[]

Page 16: Start Writing Groovy

• def j = 4• def list = []• def list = [1, 2, 3, 4]• def map = [:]• def map = [1:2, 3:4]• def array = [1, 2, 3, 4] as int[]• new Thread({ print j } as

Runnable).start()

Page 17: Start Writing Groovy

Safe navigation

Page 18: Start Writing Groovy

Groovy Truth

Page 19: Start Writing Groovy

• if (( o != null ) && ( o.size() > 0 )) { .. }

Page 20: Start Writing Groovy

• if (( o != null ) && ( o.size() > 0 )) { .. }

• if ( o?.size()) { .. }

Page 21: Start Writing Groovy

• if (( o != null ) && ( o.size() > 0 )) { .. }

• if ( o?.size()) { .. }• Safe navigation operator :

object?.method()

Page 22: Start Writing Groovy

• if (( o != null ) && ( o.size() > 0 )) { .. }

• if ( o?.size()) { .. }• Safe navigation operator :

object?.method()• Groovy Truth:– null is false– Empty String, Map or Collection is false– Zero number is false– if ( list ), if ( string ), if ( map ), if

( o?.size()) ..

Page 23: Start Writing Groovy

But

Page 24: Start Writing Groovy

• assert “false”

Page 25: Start Writing Groovy

• assert “false”• assert “ “

Page 26: Start Writing Groovy

• assert “false”• assert “ “• Object.asBoolean()

Page 27: Start Writing Groovy

• assert “false”• assert “ “• Object.asBoolean()• Object => Boolean?– Groovy : o as boolean– Java :

Boolean.valueOf( String.valueOf( o ))

Page 28: Start Writing Groovy

• assert “false”• assert “ “• Object.asBoolean()• Object => Boolean?– Groovy : o as boolean– Java :

Boolean.valueOf( String.valueOf( o ))– “false”, “null”: false in Java, true in

Groovy

Page 29: Start Writing Groovy

• assert “false”• assert “ “• Object.asBoolean()• Object => Boolean?– Groovy : o as boolean– Java :

Boolean.valueOf( String.valueOf( o ))– “false”, “null”: false in Java, true in

Groovy– Always specify if you use Java or Groovy

Truth

Page 30: Start Writing Groovy

• assert “false”• assert “ “• Object.asBoolean()• Object => Boolean?– Groovy : o as boolean– Java :

Boolean.valueOf( String.valueOf( o ))– “false”, “null”: false in Java, true in

Groovy– Always specify if you use Java or Groovy

Truth

Page 31: Start Writing Groovy

Elvis Operator

Page 32: Start Writing Groovy

• int j = ( o.size() > 0 ) ? o.size() : -1;

Page 33: Start Writing Groovy

• int j = ( o.size() > 0 ) ? o.size() : -1• def j = ( o.size() ?: -1 )

Page 34: Start Writing Groovy

• int j = ( o.size() > 0 ) ? o.size() : -1• def j = ( o.size() ?: -1 )• Elvis operator: def j = value ?:

defaultValue– Takes defaultValue if value evaluates to

false

Page 35: Start Writing Groovy

• int j = ( o.size() > 0 ) ? o.size() : -1• def j = ( o.size() ?: -1 )• Elvis operator: def j = value ?:

defaultValue– Takes defaultValue if value evaluates to

false– Be careful with zero values and empty

Strings

Page 36: Start Writing Groovy

• int j = ( o.size() > 0 ) ? o.size() : -1• def j = ( o.size() ?: -1 )• Elvis operator: def j = value ?:

defaultValue– Takes defaultValue if value evaluates to

false– Be careful with zero values and empty

Strings– int j = ( size != null ) ? size : -1– int j = size ?: -1

Page 37: Start Writing Groovy

• int j = ( o.size() > 0 ) ? o.size() : -1• def j = ( o.size() ?: -1 )• Elvis operator: def j = value ?:

defaultValue– Takes defaultValue if value evaluates to

false– Be careful with zero values and empty

Strings– int j = ( size != null ) ? size : -1 //

Accepts zero size– int j = size ?: -1 // Doesn’t accept zero

size

Page 38: Start Writing Groovy

Default parameters

Page 39: Start Writing Groovy

• public String foo( int j, int k ){ …}• public String foo( int j ){ foo ( j, 1 ); }• public String foo(){ foo ( 1, 1 ); }

Page 40: Start Writing Groovy

• public String foo( int j, int k ){ …}• public String foo( int j ){ foo ( j, 1 ); }• public String foo(){ foo ( 1, 1 ); }• Overload

Page 41: Start Writing Groovy

• public String foo( int j, int k ){ …}• public String foo( int j ){ foo ( j, 1 ); }• public String foo(){ foo ( 1, 1 ); }• def foo ( int j = 1, int k = 1 ) { .. }

Page 42: Start Writing Groovy

• public String foo( int j, int k ){ …}• public String foo( int j ){ foo ( j, 1 ); }• public String foo(){ foo ( 1, 1 ); }• def foo ( int j = 1, int k = 1 ) { .. }• def foo ( int j = 1, int k ) { .. }

Page 43: Start Writing Groovy

• public String foo( int j, int k ){ …}• public String foo( int j ){ foo ( j, 1 ); }• public String foo(){ foo ( 1, 1 ); }• def foo ( int j = 1, int k = 1 ) { .. }• def foo ( int j = 1, int k ) { .. }• def foo ( int j, int k = 1 ) { .. }

Page 44: Start Writing Groovy

• public String foo( int j, int k ){ …}• public String foo( int j ){ foo ( j, 1 ); }• public String foo(){ foo ( 1, 1 ); }• def foo ( int j = 1, int k = 1 ) { .. }• def foo ( int j = 1, int k ) { .. }• def foo ( int j, int k = 1 ) { .. }• def foo ( int j = f1(), int k = f2()) { ..

}

Page 45: Start Writing Groovy

Groovy Beans

Page 46: Start Writing Groovy

public class Bean () { private int j; public int getJ(){ return this.j; } public void setJ( int j ){ this.j = j; }}

Page 47: Start Writing Groovy

class Bean { int j}

• def b = new Bean()• println ( b.j ) / println ( b.getJ())• b.j = 33 / b.setJ( 33 )• N Groovy beans can be kept in the

same file

Page 48: Start Writing Groovy

GStrings

Page 49: Start Writing Groovy

• def s = ‘aaaaaaa’

Page 50: Start Writing Groovy

• def s = ‘aaaaaaa’• def s = ’’’

aaaaaaaaabbbbbbbb’’’

Page 51: Start Writing Groovy

• def s = ‘aaaaaaa’• def s = ’’’

aaaaaaaaabbbbbbbb’’’

• def s = “aaaaaaa”• def s = ”””

aaaaaaaaabbbbbbbb”””

Page 52: Start Writing Groovy

• def s = “aaaaaaa${b.j}”• def s = ”””

aaaa${ o.something() + b.j }aaaaabbbbbbbb”””

Page 53: Start Writing Groovy

• def s = “aaaaaaa${b.j}”• def s = ”””

aaaa${ o.something() + b.j }aaaaabbbbbbbb”””

• log.info ( String.format( “ .. %s .. ”, val ))

• log.info ( “ .. ${val} .. ” )

Page 54: Start Writing Groovy

• def s = “aaaaaaa${b.j}”• def s = ”””

aaaa${ o.something() + b.j }aaaaabbbbbbbb”””

• assert "aaaaa".class == String• assert "${1+2}".class ==

org.codehaus.groovy.runtime.GStringImpl

Page 55: Start Writing Groovy

assert

Page 56: Start Writing Groovy

• if ( o == null ) { throw new RuntimeException( “msg” ) }

Page 57: Start Writing Groovy

• if ( o == null ) { throw new RuntimeException( “msg” ) }

• assert o, “msg”

Page 58: Start Writing Groovy

• if ( o == null ) { throw new RuntimeException( “msg” ) }

• assert o, “msg”• assert ( o != null ), “msg”

Page 59: Start Writing Groovy

• if ( o == null ) { throw new RuntimeException( “msg” ) }

• assert o, “msg”• assert ( o != null ), “msg”• assert o, \

“Long message”

Page 60: Start Writing Groovy

• if ( o == null ) { throw new RuntimeException( “msg” ) }

• assert o, “msg”• assert ( o != null ), “msg”• assert o, \

“Long message”• assert false, “Fatal error”

Page 61: Start Writing Groovy

• if ( o == null ) { throw new RuntimeException( “msg” ) }

• assert o, “msg”• assert ( o != null ), “msg”• assert o, \

“Long message”• assert false, “Fatal error”• Asserting code samples is a common

practice

Page 62: Start Writing Groovy

def j = [1, 2] def k = [3, 4] assert j[0] == k[0]

Page 63: Start Writing Groovy

def j = [1, 2] def k = [3, 4] assert j[0] == k[0]

Assertion failed: assert j[0] == k[0] || | || |1 | |3 | | [3, 4] | false [1, 2]

Page 64: Start Writing Groovy

GDK

Page 65: Start Writing Groovy

http://groovy.codehaus.org/groovy-jdk/Java+++

Page 66: Start Writing Groovy

http://groovy.codehaus.org/groovy-jdk/Java+++

• Object• String• File• Collection, Map, List, Set• InputStream, OutputStream• Reader, Writer

Page 67: Start Writing Groovy

Object/Collection/Map• each()• any(), every()• find(), findAll(), grep()• join()• collect()• min(), max(), sum()• inject()

Page 68: Start Writing Groovy

String• toURL()• execute()• eachLine()• padLeft(), padRight()• tr()

Page 69: Start Writing Groovy

File• deleteDir()• eachLine()• eachFileRecurse()• getText()• write(String)• traverse()

Page 70: Start Writing Groovy

Q&A