Groovy and noteworthy

Post on 09-May-2015

642 views 0 download

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@domain.com'

println person.name// meprintln person.email// email@domain.com

Initializing beans with named parameters

class Person { String name String email}

def person = new Person(name: 'me')person.email = 'email@domain.com'

println person.name// meprintln person.email// email@domain.com

Context operations using with

class Person { String name String email}

def person = new Person(name: 'me', email: 'email@domain.com')

person.with{ println name// me println email// email@domain.com}

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

http://groovy.codehaus.org/

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