Getting
Hubert Klein Ikkink (aka mrhaki)
assert ['Hubert','Alexander','Klein','Ikkink'].inject('mr'){ c,n -> c += n[0].toLowerCase() } == 'mrhaki'
Agenda
Agenda
Workshop structure
Agenda
Groovy history
Groovy is Java on Steroids...
Agenda
Getting started
How to install - requirements
How to install
How to validate installation
Agenda
Transforming Java to Groovy
public class UsingJava {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Using Java " + getName();
}
public static void main(String[] args) {
UsingJava usingJava = new UsingJava();
usingJava.setName("Geeks");
System.out.println(usingJava);
}
}
What we got
class UsingJava {
def name
String toString() {
"Using Java $name" }
static void main(String[] args) {
def usingJava = new UsingJava(name: ‘Geeks’)
println usingJava
}
}
60% less code
Agenda
Types
Agenda
String variations including GString
Agenda
Regular Expressions
Agenda
Objects
Agenda
Control structures
Agenda
Operators
Operator overloading
Operator | Method |
a + b | a.plus(b) |
a - b | a.minus(b) |
a * b | a.multiply(b) |
a ** b | a.power(b) |
a / b | a.div(b) |
a % b | a.mod(b) |
a | b | a.or(b) |
a & b | a.and(b) |
a ^ b | a.xor(b) |
a++ or ++a | a.next() |
a-- or --a | a.previous() |
a[b] | a.getAt(b) |
a[b] = c | a.putAt(b, c) |
a << b | a.leftShift(b) |
a >> b | a.rightShift(b) |
a >>> b | a.rightShiftUnsigned(b) |
switch(a) { case(b) : } | b.isCase(a) |
Operator overloading
Operator | Method |
~a | a.negate() |
-a | a.negative() |
+a | a.positive() |
a == b | a.equals(b) |
a != b | ! a.equals(b) |
a <=> b | a.compareTo(b) |
a > b | a.compareTo(b) > 0 |
a >= b | a.compareTo(b) >= 0 |
a < b | a.compareTo(b) < 0 |
a <= b | a.compareTo(b) <= 0 |
as as type | a.asType(typeClass) |
Break
Coffee in the Atrium
Agenda
Closures
Closures: Hands-on!
Closures: Possible solution
def gr8 = { arg1, arg2, arg3 = 'gr8conf' ->
"$arg1 $arg2 $arg3"
}
println gr8("I'm","going to")
def cl = gr8.ncurry(1,'love')
def m(arg, closure) {
println closure.call(arg)
}
m('I',cl)
Agenda
Collections
Collections: Hands-on
def map = [a:1,b:2,c:1,d:3,e:7,f:2,g:5]
Collections: Possible solution
(1..100).each { println it }
def even = (1..100).findAll { it % 2 == 0 }
println even.groupBy { it.intdiv(10) * 10 }
def map = [a:1,b:2,c:1,d:3,e:7,f:2,g:5]
println map.groupBy { key, value -> value }
// { it.value }
Agenda
File I/O
Agenda
XML
XML: Hands-on
XML: Possible solutions
def url = "http://mrhaki.com/books.xml".toURL()
def slurper = new XmlSlurper()
def xml = slurper.parseText(url.text)
println xml.book.collect {it.title }
println xml.book.find { it.@id == '2' }.title
Agenda
AST
Agenda
Metaprogramming
Agenda
Unittesting
Agenda
Integrate with Java
Integrating with Java
Small demo
Agenda
GR8 stuff in the Groovy Ecosystem
Q & A
Thank you!