Groovy is a dynamic language for the JVM and the natural evolution for a Java developer because its flat learning curve. If you want to know why developing with Groovy is an Adventure Time, this is your talk. You'll learn with examples the main characteristics that make Groovy a powerful and versatile language: dynamic typing, closures, lists and maps handling, power asserts, builders, metaprogramming, scripting, DSL's, AST transformations,... and many more.I can guarantee you that after the talk you'll want to learn more about Groovy and use it in your day at work.
4. “Apache Groovy is a powerful, optionally typed and dynamic
language, with static-typing and static compilation capabilities,
for the Java platform aimed at improving developer
productivity thanks to a concise, familiar and easy to learn
syntax.
It integrates smoothly with any Java program, and immediately
delivers to your application powerful features, including
scripting capabilities, Domain-Specific Language authoring,
runtime and compile-time meta-programming and functional
programming.
– Groovy website
5. “Apache Groovy is a powerful, optionally typed and dynamic
language, with static-typing and static compilation capabilities,
for the Java platform aimed at improving developer
productivity thanks to a concise, familiar and easy to learn
syntax.
It integrates smoothly with any Java program, and immediately
delivers to your application powerful features, including
scripting capabilities, Domain-Specific Language authoring,
runtime and compile-time meta-programming and functional
programming.
– Groovy website
6. “Apache Groovy is a powerful, optionally typed and dynamic
language, with static-typing and static compilation capabilities,
for the Java platform aimed at improving developer
productivity thanks to a concise, familiar and easy to learn
syntax.
It integrates smoothly with any Java program, and immediately
delivers to your application powerful features, including
scripting capabilities, Domain-Specific Language authoring,
runtime and compile-time meta-programming and functional
programming.
– Groovy website
7. “Apache Groovy is a powerful, optionally typed and dynamic
language, with static-typing and static compilation capabilities,
for the Java platform aimed at improving developer
productivity thanks to a concise, familiar and easy to learn
syntax.
It integrates smoothly with any Java program, and immediately
delivers to your application powerful features, including
scripting capabilities, Domain-Specific Language authoring,
runtime and compile-time meta-programming and functional
programming.
– Groovy website
8. “Apache Groovy is a powerful, optionally typed and dynamic
language, with static-typing and static compilation capabilities,
for the Java platform aimed at improving developer
productivity thanks to a concise, familiar and easy to learn
syntax.
It integrates smoothly with any Java program, and immediately
delivers to your application powerful features, including
scripting capabilities, Domain-Specific Language authoring,
runtime and compile-time meta-programming and functional
programming.
– Groovy website
9. “Apache Groovy is a powerful, optionally typed and dynamic
language, with static-typing and static compilation capabilities,
for the Java platform aimed at improving developer
productivity thanks to a concise, familiar and easy to learn
syntax.
It integrates smoothly with any Java program, and immediately
delivers to your application powerful features, including
scripting capabilities, Domain-Specific Language authoring,
runtime and compile-time meta-programming and functional
programming.
– Groovy website
10. “Apache Groovy is a powerful, optionally typed and dynamic
language, with static-typing and static compilation capabilities,
for the Java platform aimed at improving developer
productivity thanks to a concise, familiar and easy to learn
syntax.
It integrates smoothly with any Java program, and immediately
delivers to your application powerful features, including
scripting capabilities, Domain-Specific Language authoring,
runtime and compile-time meta-programming and functional
programming.
– Groovy website
11. “Apache Groovy is a powerful, optionally typed and dynamic
language, with static-typing and static compilation capabilities,
for the Java platform aimed at improving developer
productivity thanks to a concise, familiar and easy to learn
syntax.
It integrates smoothly with any Java program, and immediately
delivers to your application powerful features, including
scripting capabilities, Domain-Specific Language authoring,
runtime and compile-time meta-programming and functional
programming.
– Groovy website
12. “Apache Groovy is a powerful, optionally typed and dynamic
language, with static-typing and static compilation capabilities,
for the Java platform aimed at improving developer
productivity thanks to a concise, familiar and easy to learn
syntax.
It integrates smoothly with any Java program, and immediately
delivers to your application powerful features, including
scripting capabilities, Domain-Specific Language authoring,
runtime and compile-time meta-programming and functional
programming.
– Groovy website
13. “Apache Groovy is a powerful, optionally typed and dynamic
language, with static-typing and static compilation capabilities,
for the Java platform aimed at improving developer
productivity thanks to a concise, familiar and easy to learn
syntax.
It integrates smoothly with any Java program, and immediately
delivers to your application powerful features, including
scripting capabilities, Domain-Specific Language authoring,
runtime and compile-time meta-programming and functional
programming.
– Groovy website
16. ➢ Java is solid
➢ Known by a lot of developers
➢ Used everywhere
➢ Is fast
But...
➢ Java is verbose
➢ Can be annoying
➢ It's not dynamic
Why not Java?
39. ➢ Dynamic
➢ Optional static compilation
➢ Everything is an object
➢ Operator overloading
➢ + is a call to .plus()
➢ * is a call to .multiply()
➢ Native syntax for lists, maps and ranges
➢ Methods and classes are public by default
➢ All exceptions are unchecked
➢ http://groovy-lang.org/differences.html
Differences between Java and Groovy
40. Getters y setters
public class Person {
private String name;
private int age;
String getName() {
return name;
}
void setName(String name) {
this.name = name;
}
int getAge() {
return age;
}
void setAge(int age) {
this.age = age;
}
}
41. Getters y setters
class Person {
String name
int age
}
public class Person {
private String name;
private int age;
String getName() {
return name;
}
void setName(String name) {
this.name = name;
}
int getAge() {
return age;
}
void setAge(int age) {
this.age = age;
}
}
42. Named constructors
class Person {
String name
int age
}
def p = new Person(name: 'Iván', age: 36)
assert p.name == 'Iván'
p.age = 37
assert p.age == 37
44. Strings and GStrings
def name = 'Iván'
def age = 36
println "¡Hi ${name}, you are ${age} years old!"
def query = """
insert into people
(firstName, age)
values (${name}, ${age})
"""
new Sql(datasource).execute query
45. Strings and GStrings
def name = 'Iván'
def age = 36
println "¡Hi ${name}, you are ${age} years old!"
def query = """
insert into people
(firstName, age)
values (${name}, ${age})
"""
new Sql(datasource).execute query
106. @EqualsAndHashCode
public class User extends java.lang.Object {
private String name
private Integer age
public int hashCode() {
java.lang.Object _result = org.codehaus.groovy.util.HashCodeHelper.initHash()
if (!(this.getName().is(this))) {
_result = HashCodeHelper.updateHash(_result, this.getName())
}
if (!(this.getAge().is(this))) {
_result = HashCodeHelper.updateHash(_result, this.getAge())
}
return _result
}
public boolean canEqual(Object other) {
return other instanceof User
}
public boolean equals(Object other) {
if ( other == null) {
return false
}
if (this.is(other)) {
return true
}
if (!( other instanceof User)) {
return false
}
User otherTyped = (( other ) as User)
if (!(otherTyped.canEqual( this ))) {
return false
}
if (!(this.getName() == otherTyped.getName())) {
return false
}
if (!(this.getAge() == otherTyped.getAge())) {
return false
}
return true
}
}