Upload
izzet-mustafaiev
View
646
Download
0
Embed Size (px)
DESCRIPTION
What is Groovy. Why Groovy is an agile dynamic language? What makes Groovy special? Groovy tool set. Getting started from suggestions.
Citation preview
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