3. What is groovy?
“Groovy is what Java would look like had it been
written in the 21st century.”
An agile and dynamic language for the JVM
Inspired by languages like Python, Ruby and
Smalltalk
Compiles straight to Java bytecode
Compiled or interpreted
Supports Domain-Specific Languages and other
compact syntax
4. A programming language is for thinking
about programs, not for expressing
programs you've already thought of. It
should be a pencil, not a pen.
Paul Graham
5. I think I know java!
//... Person.java //... Person.groovy
//... Person.groovy
public class Person { public class Person {
private String name; class Person { name;
private String
private int age; String name
private int age;
int age
public Person() { public Person() {
}
} }
public Person(String name, int age) { public Person(String name, int age) {
this.name = name; //... Person.groovyname;
this.name =
this.age = age; class Person { age;
this.age =
} }
def name
public String getName() { def ageString getName() {
public
return name; } return name;
} }
public void setName(String name) { person = new Person(name: "Ion", age: 66)
public void setName(String name) {
this.name = name; this.name = name;
} //person.setAge(61)
}
person.age = 61
public int getAge() { public int getAge() {
return age; return age;
//System.out.println(person.getName())
} }
println person.name
public void setAge(int age) { public void setAge(int age) {
this.age = age; //> Ionthis.age = age;
} }
} }
6. Gotchas
Automatic Imports
Everything is an object
Optional data type declaration (Duck
Typing)
Optional exception handling
Optional semicolons and parentheses
Optional return statements
Operator overloading
7. Groovy Closures
Like a "code block" or a method pointer
May be passed as arguments
May accept arguments
May return values
Makes anonymous inner classes obsolete
8. Closures
//... ClosureExample.java
//... ClosureExample.java //... ClosureExample.groovy
import com.google.common.base.Predicate;
import java.util.ArrayList; import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import java.util.Arrays; import com.google.common.collect.Iterables;
import java.util.ArrayList; import java.util.ArrayList;
def numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
import java.util.List;
import java.util.Arrays; import java.util.Arrays;
def oddNumbers = numbers.findAll {it % 2!=0}
import java.util.List; import java.util.List;
public class ClosureExample { oddNumbers.each {println it}
public static void main(String[] args) {
public class ClosureExample { public class ClosureExample {
List<Integer> numbers = Arrays.asList(
public static void main(String[] args) { public static void main(String[] args) {
List<Integer> numbers = 2, 3, 4, 5, 6, 7, 8, 9);
1, Arrays.asList( List<Integer> numbers = Arrays.asList(
1, 2, 3, 4, 5, 6, 7, 8, 9); 1, 2, 3, 4, 5, 6, 7, 8, 9);
List<> oddNumbers = new ArrayList<..>();
Iterable<> number : numbers) {
for (int oddNumbers=Iterables.filter(numbers, Iterable<> oddNumbers=Iterables.filter(numbers,
new Predicate<Integer>() {
if (number % 2 != 0) { new Predicate<Integer>() {
def odd = {Integer n->
public boolean apply(Integer number) {
oddNumbers.add(number); public boolean apply(Integer number) {
return return number % 2 != 0;
n%2 != 0
} return number % 2 != 0;
} } } }
}); });
for (int number : oddNumbers) { def numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for (int number : oddNumbers) { for (int number : oddNumbers) {
System.out.println(number);
System.out.println(number); def oddNumbers = numbers.findAll odd
System.out.println(number);
}} oddNumbers.each {println it}
}
}
} }
}
} }