Groovy every day
-
Upload
paul-woods -
Category
Documents
-
view
3.428 -
download
1
description
Transcript of Groovy every day
![Page 2: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/2.jpg)
Resources
http://groovy-almanac.org/http://mrhaki.blogspot.com/http://gr8forums.org/index.phphttp://groovyconsole.appspot.com/
Manning Groovy In Action ISBN 1-932394-84-2
Programming Groovy ISBN-10: 1-934356-09-3
![Page 3: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/3.jpg)
List - create
create a list def list = [ 'q', 'w', 'e' ] println list
![Page 4: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/4.jpg)
List – non typed elements
the items in a list are non-typed def a = [ 1, 1.1, 'a', new Date() ]
![Page 5: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/5.jpg)
List – adding elements
add elements to a list – use left shift def list = ['q', 'w', 'e'] list << 'r' list << 't' list << 'y' println list
add a list to a list – use the plus list += [1,2,3] println list
![Page 6: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/6.jpg)
List - iterating
loop though the elements in a list def list = ['q', 'w', 'e', 'r', 't', 'y']
for(def item : list) { println "by item : $item" }
for(def item in list) { println "by item in : $item" }
list.each { item -> println "by each : $item" }
![Page 7: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/7.jpg)
List - transform
Transform a list def list = [1,2,3,4,5] def list2 = list.collect { it * 10 } println "list=$list" println "list2=$list2"
![Page 8: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/8.jpg)
List – retrieving elements
Retrieving Elements def list = ['q', 'w', 'e', 'r', 't', 'y']
println "element 0 : ${list.get(0)}" println "element 1 : ${list[1]}" println "elements 1,3,5 : ${list[1,3,5]}" println "elements 0..3 : ${list[0..3]}" println "last 3 elements : ${list[-3..-1]} "
println "element last 3 : ${list[-3..-1]} "
![Page 9: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/9.jpg)
List – removing elements
Removing Elements def list = ["q", "w", "e", "r", "t", "y"] println list list -= "q" println list list -= ["w", "e"] println list
![Page 10: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/10.jpg)
List - sorting
Sorting Lists // note – original list is not changed
def list = ['q', 'w', 'e', 'r', 't', 'y'] def sorted = list.sort() println "list=$list" println "sorted=$sorted"
![Page 11: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/11.jpg)
List – unique elements
Retrieving the unique elements // note – list is modified // note – list does not need to be sorted.
def list = ['a', 'b', 'c', 'a', 'b', 'c' ] println "list = $list" list.unique() println "list = $list"
![Page 12: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/12.jpg)
List - find
Finding elements in Lists
def list = ['q', 'w', 'e', 'r', 't', 'y'] def letter = list.find { 'q' } println "find : $letter"
def letters = list.findAll { it < 't' } println "findAll : $letters"
println "all items below f : ${list.every { item -> item < 'f'} }"
println "any item below f : ${list.any { item -> item < 'f'} }"
![Page 13: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/13.jpg)
List - join
convert list into a string def list = [ 'q','w','e','r','t','y'] println list.join("-")
![Page 14: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/14.jpg)
List – advanced 1
sort a list of maps by first or last or last,first list = [ [first:"paul", last:"woods"], [first:"linda", last:"zinde"], [first:"alex", last:"zinde"], [first:"paul", last:"allen"] ]
// sorting by a value in a map println "sorted by first : ${list.sort { it.first } }" println "sorted by last : ${list.sort { it.last } }"
// sorting by 2 values
def sorted = list.sort { x, y -> (x.last <=> y.last) ?: (x.first <=> y.first)
} println "sort by last and first : ${sorted}"
![Page 15: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/15.jpg)
List – advanced 2
transform a list of lists to a csv string
def list = [ [ "first", "last" ], [ "paul", "woods"], [ "linda", "zinde"], [ "alex", "zinde"], [ "paul", "allen"] ]
def csv = list.collect { row -> row.collect { item -> "\"$item\"" }.join(',') }.join('\n')
println csv
![Page 16: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/16.jpg)
List - mystery
Why does this work? List<String> z = new ArrayList<String>() z << "A" z << 1 z << new Date() println z
? because generics in java are checked at compile time, and groovy doesn't check
![Page 17: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/17.jpg)
![Page 18: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/18.jpg)
Map - create
Create map def map = [ first : "Paul", last : "Woods" ]
println map
Tip – if you need iterate through your keys in order... def map = new TreeMap<String,String>()
![Page 19: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/19.jpg)
Map – adding elements
![Page 20: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/20.jpg)
Map - iterating
looping through maps def map = [ first : "Paul", last : "Woods" ]
for(keyValue in map) { println "keyValue=$keyValue" }
for(keyValue in map) { println "key=$keyValue.key, value=$keyValue.value" }
map.each { kv -> println "kv=$kv" } map.each { k, v -> println "k=$k, v=$v" }
![Page 21: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/21.jpg)
Map – retrieving elements
retrieving elements def map = [ first : "Paul", last : "Woods" ]
println "map.first = $map.first" println "map['first'] = ${map['first']}"
def key = "first" def value = map."$key"
println "def key=\"$key\"; map.\"\$key\" = ${value}"
![Page 22: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/22.jpg)
Map – removing elements
removing elements from a map def map = [ first : "Paul", last : "Woods" ] map.remove('first') println map
![Page 23: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/23.jpg)
Map – find
finding elements def map = [ first : "Paul", last : "Woods"]
def result1 = map.find { kv -> kv.value == "Woods" } println result1.getClass() println result1
def result2 = map.findAll { kv -> kv.key != "last" } println result2.getClass() println result2
![Page 24: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/24.jpg)
![Page 25: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/25.jpg)
Range – the basics
Basic range operations def range = (1..5) println range println range.class range.each { n -> println n } println "contains 5 : " + range.contains(5) println "contains 7 : " + range.contains(7)
range.step(2) { println it }
def range2 = (new Date()-7 .. new Date()) range2.each { date -> println date }
![Page 26: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/26.jpg)
![Page 27: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/27.jpg)
Operation – ?. subscript
The method will not be called if the object is null.
def list = [ 'a', 'b', null, 'c', 'd' ]
// list.each { item -> println item.toUpperCase() }
list.each { item -> println item?.toUpperCase() }
![Page 28: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/28.jpg)
Operation – ?: conditional
if object is false, return another object. else return the object
def q = null println "null : " + (q ?: "it is false")
q = "" println "empty : " + (q ?: "it is false")
q = "abc" println "value : " + (q ?: "it is false")
![Page 29: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/29.jpg)
Operation - <=> - spaceship
calls the .compareTo method returns -1 if a < b returns +1 if a > b returns 0 if a == b
println "1 <=> 2 : " + (1 <=> 2) println "2 <=> 1 : " + (2 <=> 1) println "1 <=> 1 : " + (1 <=> 1)
![Page 30: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/30.jpg)
![Page 31: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/31.jpg)
Closures - introduction
A block of executable code, similar to a method, but it can be easily assigned to a variable, and passed to other methods.
def add = { a, b ->
a+b
}
println add(1,2)
![Page 32: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/32.jpg)
Closure - example
A method that takes a closure
class Names {
def name1 def name2 def name3
def capitalize(Closure c) { c.call name1.capitalize() c.call name2.capitalize() c.call name3.capitalize() } }
def names = new Names(name1:'paul', name2:'mike', name3:'eric')
def greeting = { name -> println "Hello, " + name }
names.capitalize greeting
![Page 33: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/33.jpg)
Closure - syntax
Syntax for zero, 1 and 2+ parameter closures
def zero = { -> println "zero parameters" }
def one_a = { println "one parameter : $it" }
def one_b = { a-> println "one parameter : $a" }
def two = { a, b -> println "two parameters : $a $b" }
zero.call() one_a.call('1a') one_b.call('1b') two.call('22', '2222')
![Page 34: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/34.jpg)
MultiAssign
initialize or assign multiple variables with values from a list.
def a def b (a, b) = [ 1, 2] println "a=$a" println "b=$b"
def (c, d) = [ 3 , 4 ] println "c=$c" println "d=$d"
![Page 35: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/35.jpg)
![Page 36: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/36.jpg)
Optional parenthesis, semicolons, and returns
In some situations, groovy allows you to remove parenthesis, semicolons and return statements.
![Page 37: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/37.jpg)
Optional – Parenthesis 1
No Arguments and no ‘get’ prefix – () mandatory class Name { def first, last def print() { println first + " " + last } def printDelim(delim) { println first + delim + last } def getFullName() { return first + " " + last } def getTotal(delim) { return first + delim + last } }
def name = new Name(first:"Paul", last:"Woods")
name.print()
![Page 38: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/38.jpg)
Optional – Parenthesis 2
One or more arguments and not referencing the return value – () optional class Name { def first, last def print() { println first + " " + last } def printDelim(delim) { println first + delim + last } def getFullName() { return first + " " + last } def getTotal(delim) { return first + delim + last } }
def name = new Name(first:"Paul", last:"Woods")
name.printDelim " "
![Page 39: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/39.jpg)
Optional – Parenthesis 3Optional – Parenthesis 3
The method has a ‘get’ prefix, and no arguments. () optional class Name { def first, last def print() { println first + " " + last } def printDelim(delim) { println first + delim + last } def getFullName() { return first + " " + last } def getTotal(delim) { return first + delim + last } }
def name = new Name(first:"Paul", last:"Woods")
println name.fullName
![Page 40: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/40.jpg)
Optional – Parenthesis 4Optional – Parenthesis 4
method has ‘get’ and client has 1 or more arguments – () mandatory
class Name { def first, last def print() { println first + " " + last } def printDelim(delim) { println first + delim + last } def getFullName() { return first + " " + last } def getTotal(delim) { return first + delim + last } }
def name = new Name(first:"Paul", last:"Woods")
println name.getTotal(",")
![Page 41: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/41.jpg)
Optional – semicolons
Semicolons are almost always optionalMust be used if multiple statements on a
single line.
def a = 1 def b = 2 println a println b println a; println b
![Page 42: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/42.jpg)
Optional – returns – 1
Returns are optional when the value to be returned is the last line of the method. def sum(a, b) { a + b }
def sub(a, b) { def total = a + b total }
![Page 43: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/43.jpg)
Optional – returns – 2
Returns are optional when the method is a if/else method. The value to be returned is the last line of each block.
def choose(a, b, c) { if(a > 0) { b } else if(a < 0) { c } else { 0 } }
println " 1 : " + choose( 1, 10, 20) println "-1 : " + choose(-1, 10, 20) println " 0 : " + choose( 0, 10, 20)
![Page 44: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/44.jpg)
Optional – returns – 3
![Page 45: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/45.jpg)
![Page 46: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/46.jpg)
PowerAssert
Power Assert – in a failed assert statement, groovy shows you the values of the objects.
def map = [a : [ b : [ c : 2 ] ] ]
assert 3 == map.a.b.c | | | | | | | | | 2 | | | {c=2} | | {b={c=2}} | {a={b={c=2}}} false
![Page 47: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/47.jpg)
PowerAssert - gotcha
PowerAssert Gotcha – whitespace
def a = "a"def b = "a\r\n"assert a == b
Assertion failed: assert a == b | | | a | a false
May not tell you about whitespace
![Page 48: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/48.jpg)
![Page 49: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/49.jpg)
Get the current groovy Version
import org.codehaus.groovy.runtime.InvokerHelper println InvokerHelper.version
![Page 50: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/50.jpg)
![Page 51: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/51.jpg)
Groovy
A Dynamic scripting language similar to the Java language
Executes on the JVM (1.5 and 1.6)Can be used stand-alone, or can be added to
a Java application.
![Page 52: Groovy every day](https://reader035.fdocuments.us/reader035/viewer/2022062704/55593336d8b42a4f3d8b4a11/html5/thumbnails/52.jpg)
Download and Install
http://groovy.codehaus.orgDownload .zipExtract to c:\toolsSet groovy_home = c:\tools\groovy-1.7.3Add to your path: %groovy_home%\bin
http://groovyconsole.appspot.com