groovy and noteworthy
DESCRIPTION
What is Groovy. Why Groovy is an agile dynamic language? What makes Groovy special? Groovy tool set. Getting started from suggestions.TRANSCRIPT
Groovy and
Noteworthy
Izzet Mustafayev@EPAM Systems @webdizzhttp://webdizz.name
Agenda
● Groovy
○ Specials
○ Basics
○ Infrastructure
● Demo
● Getting Started
GroovySpecials
Groovy is an agile dynamic language
println 'Hello World !'
Java is a Groovy but Groovy is not Java
Groovy supports DSL
Groovy supports DSL
● A flexible syntax
● Closures
● Meta-programming
● Operator overloading
● No dots and commas
Groovy provides statically type check
Groovy provides statically type check
@groovy.transform.TypeChecked void method() { // do nothing}
Groovy Basics
Groovy Shell
Omission of get/set methods
class Person { String name String email}
def person = new Person(name: 'me')person.email = '[email protected]'
println person.name// meprintln person.email// [email protected]
Initializing beans with named parameters
class Person { String name String email}
def person = new Person(name: 'me')person.email = '[email protected]'
println person.name// meprintln person.email// [email protected]
Context operations using with
class Person { String name String email}
def person = new Person(name: 'me', email: '[email protected]')
person.with{ println name// me println email// [email protected]}
GStrings (interpolation, multiline)
def param = 'param'def groovyString = """There is a ‘${param}’ param
"""
println groovyString // There is a ‘param’ param
Native syntax for data structures
def list = [1, 4, 6, 9]println list[-2] // 6
def map = [UA: 'Ukraine', UK: 'United Kingdom']println map.UA // Ukraine
def range = 10..20println range[2] //12
Elvis operator for default values
def name = null
println name != null ? name : "Unknown" // Unknown
println name ?: "Unknown" // Unknown
name = 'name'println name ?: "Unknown" // name
Safe graph navigationif (order != null) { if (order.getCustomer() != null) { if (order.getCustomer().getAddress() != null) {
Address address;address = order.getCustomer().getAddress()System.out.println(address);
} } }
println order?.customer?.address
Closures
printSum = { a, b -> print a+b }printSum(5, 7)// 12
upperCasedList = ['a','b','c','d']. collect{ it.toUpperCase() }
println upperCasedList // A, B, C, D
Metaprogramming
String.metaClass.cons2var = { ->String res = ''delegate.toLowerCase().tokenize('_').each{ s ->res+=res?s.capitalize():s
} res}
println "SAMPLE_VAR".cons2var()//sampleVar
Groovy Infrastructure
Gradle - http://gradle.org/
● Strong yet flexible conventions
● Manageable and understandable builds
● Follows convention over configuration approach
● Great plug-ins ecosystem
Spock - https://github.com/spockframework/spock
● Testing and specification framework
● JUnit compatible
● Highly expressive specification language
Easyb - http://easyb.org/
● Behavior driven development framework
● Specifications are written in Groovy and run via a Java runner,
command line, Maven or Ant
● Supports a few different styles of specifications ranging from
RSpec's it to a story based DSL with givens, whens, and thens
Grails - http://grails.org/
● Grails is an Open Source, full stack web
application framework for the JVM
● Based on Spring, Hibernate, Sitemesh, Quartz
etc.
● There are a lot of plug-ins
Griffon - http://griffon.codehaus.org
● Desktop development framework inspired in Grails
● Primarily Swing based however supports SWT,
Pivot, GTK and JavaFX too
● Growing plugin system (80+ plugins)
Gaelyk - http://gaelyk.appspot.com
● Google App Engine development framework
based on Groovy and Groovlets
● Emerging plugin system
GPars - http://gpars.codehaus.org/
● Provides DSL and concurrent friendly methods for
collections
● Supports Actors and STM
● Dataflow concurrency model
CodeNarc - http://codenarc.sourceforge.net/
● Static analysis for Groovy code
● Over 175 rules to detect defects, bad practices,
style issues etc.
● Build tools and Sonar integration
GVM - http://gvmtool.net/
● Manages parallel Versions of multiple SDKs
● Convenient command line interface
● Inspired by RVM
● Supports Groovy, Grails, Gradle etc
● Unfortunately does not work for Win
GroovyServ - http://kobo.github.io/groovyserv/
● Improves Groovy’s startup time
● Works for Win
Getting Started
Groovy in Action*
by Dierk König● Groovy committer since
2004
● Frequent conference
speaker
● Contributor to several agile
and testing books
Programming Groovy 2
by Venkat Subramaniam● An award-winning author
● Famous Agile Guru
● Frequent conference
speaker
Thank You!
Groovy and
NoteworthyIzzet Mustafayev@EPAM Systems
@webdizzhttp://webdizz.name