start writing groovy

70
Stop Writing Java Start Writing Groovy Evgeny Goldin

Upload: evgeny-goldin

Post on 18-May-2015

1.322 views

Category:

Technology


1 download

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.

TRANSCRIPT

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