Practical Groovy for Java experts Václav Pech Software Developer and Product Evangelist JetBrains, Inc Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 Outline ● Part 1: Groovy Syntax ● Part 2: Fun with Groovy ● – Scripting – Meta-programming – DSLs BEWARE!: Highly addictive Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 Properties Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 Closures Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 Closures – implicit parameter Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 Iterations Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 GDK = JDK + FUN ● ● ● ● java.util.Collection – each(), find(), join(), min(), max() … java.lang.Object – any(), every(), print(), invokeMethod(), … java.lang.Number – plus(), minus(), power(), upto(), times(), … … Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 Some operators ● [‘Java’, ‘Groovy’]*.toUpperCase() ● customer?.shippingAddress?.street ● return user.locale?:defaultLocale Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 Syntax enhancements ● ● ● Dynamic (duck) typing – optional! GDK Syntax enhancements – – – – – – Properties Closures Named parameters Collections and maps Operator overloading … Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 Enjoy writing tests ● ● ● For both Java and Groovy Run with Ant, Maven, IDE, … Integrated JUnit support ● ● ● assert…(), shouldFail(), … Relaxed typing Easy mocking Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 Big Boy Toys ● Scripting ● Builders ● Domain Specific Languages ● Meta-programming Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 Scripting ● Evaluate custom Groovy code At run-time!!! Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 Builders Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 Builders - GAnt Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 Builders – Spring config Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 Categories Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 DSL ● ● ● Limited purpose language Targeted to a particular domain Friendlier API to a framework – External ● – SQL, HTML, CSS, … Internal Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 DSL – Date manipulation Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 DSL – Hibernate criteria Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 DSL – Account manipulation Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 Dynamic method invocation GroovyObject invokeMethod() getProperty() MetaClass setProperty() methods properties methodMissing() propertyMissing() invokeMethod() Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 Summary Groovy Powerful Java extension Tests, Builders, Scripting, DSLs – Contact me: [email protected] Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009 Questions ? Václav Pech - [email protected] – JetBrains Javaday Roma III Edizione – 24 gennaio 2009