Download - Groovy for java developers
![Page 1: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/1.jpg)
www.tothenew.com
Groovy For Java Developers
![Page 2: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/2.jpg)
www.tothenew.com
About Me
Puneet BehlAssociate Technical LeadTO THE NEW [email protected]: https://github.com/puneetbehl/Twitter: @puneetbhlLinkedIn: https://in.linkedin.com/in/puneetbhl
![Page 3: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/3.jpg)
www.tothenew.com
Agenda
● Background● From Java to Groovy ● Groovy Closure, Traits● Static Type Checking and Compilation● How can I get started with Groovy?● Groovy Ecosystem
![Page 4: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/4.jpg)
www.tothenew.com
What is Groovy?
![Page 5: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/5.jpg)
www.tothenew.com
![Page 6: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/6.jpg)
www.tothenew.com
What is Groovy?
![Page 7: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/7.jpg)
www.tothenew.com
Groovy is:● an alternate language which run on JVM● dynamic language - add behavior to existing library at
runtime
What is Groovy?
![Page 8: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/8.jpg)
www.tothenew.com
But, also supports static type checking and static compilation
Groovy …
![Page 9: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/9.jpg)
www.tothenew.com
Groovy is compiled
Groovy Source
Java Byte Code
JVM
Compilation
java -cp groovy-all-2.3.0.jar …
![Page 11: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/11.jpg)
www.tothenew.com
How to setup Groovy?
● Using Binary
Download the binary from http://www.groovy-lang.org
Install JDK > v1.6 Set GROOVY_HOME to point to the installation.Add GROOVY_HOME/bin to the path variable.
![Page 12: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/12.jpg)
www.tothenew.com
How to setup Groovy?
● Using Binary
Download the binary from http://www.groovy-lang.org
Install JDK > v1.5Set GROOVY_HOME to point to the installation.Add GROOVY_HOME/bin to the path variable.
● Using SDKMAN[JDK should be present]curl -s get.sdkman.io | bashsource "$HOME/.sdkman/bin/sdkman-init.sh"sdk install groovy
![Page 13: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/13.jpg)
www.tothenew.com
● Using Binary
Download the binary from http://www.groovy-lang.org
Install JDK > v1.6 Set GROOVY_HOME to point to the installation.Add GROOVY_HOME/bin to the path variable.
● Using SDKMAN[JDK should be present]curl -s get.sdkman.io | bashsource "$HOME/.sdkman/bin/sdkman-init.sh"sdk install groovy
How to setup Groovy?
● Windows User
Download and install Babun - a Windows shell you will love.Now, you can install SDKMAN & Groovy.
![Page 14: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/14.jpg)
www.tothenew.com
● Open a terminal window and type “groovysh”.● Command line.● It allows easy access to evaluate Groovy expressions, and run simple
experiments.
Groovy : Shell
![Page 15: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/15.jpg)
www.tothenew.com
● Allows a user to enter and run Groovy scripts● You can save your scripts, open existing scripts etc● Groovy Web Console
http://groovyconsole.appspot.com
Groovy Console
![Page 16: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/16.jpg)
www.tothenew.com
● Powerful - closure, traits, metaprogramming, DSL etc.
● Optional - no more ceremonies
● Dynamic - decides at runtime
● Easy to learn - syntax like Java
● Simple and Expressive
Why Groovy?
![Page 17: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/17.jpg)
www.tothenew.com
Typing
public keyword
return keyword
Parenthesis
Semicolons
OPTIONAL
![Page 18: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/18.jpg)
www.tothenew.com
Optional
public class Greeter {
private String place;
public String getPlace() { return place; }
public void setPlace(String place){ this.place = place; }
public String greet(String name) { return "Hello "+ name + "! Welcome to "+ place; }
public static void main(String[] args) { Greeter greeter = new Greeter(); greeter.setPlace("GR8Conf US"); System.out.println( greeter.greet("Everyone")
); } }
![Page 19: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/19.jpg)
www.tothenew.com
Optional …
public class Greeter {
private String place;
public String getPlace() { return place; }
public void setPlace(String place){ this.place = place; }
public String greet(String name) { return "Hello "+ name + "! Welcome to "+ place; }
public static void main(String[] args) { Greeter greeter = new Greeter(); greeter.setPlace("GR8Conf US"); System.out.println( greeter.greet("Everyone")
); } }
Semicolons
![Page 20: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/20.jpg)
www.tothenew.com
Optional …
public class Greeter {
private String place
public String getPlace() { return place }
public void setPlace(String place){ this.place = place }
public String greet(String name) { return "Hello "+ name + "! Welcome to "+ place }
public static void main(String[] args) { Greeter greeter = new Greeter() greeter.setPlace("GR8Conf US") System.out.println( greeter.greet("Everyone")
) } }
verbose Java properties
![Page 21: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/21.jpg)
www.tothenew.com
Optional …
public class Greeter {
String place
public String greet(String name) { return "Hello "+ name + "! Welcome to "+ place }
Greeter greeter = new Greeter() greeter.setPlace("GR8Conf US") System.out.println( greeter.greet("Everyone")
)
public keyword
![Page 22: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/22.jpg)
www.tothenew.com
Optional …
class Greeter {
String place
String greet(String name) { return "Hello "+ name + "! Welcome to "+ place }
Greeter greeter = new Greeter() greeter.setPlace("GR8Conf US") System.out.println( greeter.greet("Everyone")
) }
return keyword
property notation
println shortcuts
Parenthesis
optional typing
![Page 23: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/23.jpg)
www.tothenew.com
Optional …
class Greeter {
String place
String greet(String name) { "Hello "+ name + "! Welcome to "+ place }
def greeter = new Greeter()
greeter.place = "GR8Conf US" println greeter.greet("Everyone")
![Page 24: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/24.jpg)
www.tothenew.com
Optional …
class Greeter {
String place
String greet(String name) { "Hello $name! Welcome to $place" }
def greeter = new Greeter()
greeter.place = "GR8Conf US" println greeter.greet("Everyone")
GString
![Page 25: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/25.jpg)
www.tothenew.com
Let’s refactor the white space…
Optional …
![Page 26: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/26.jpg)
www.tothenew.com
Optional …
class Greeter { String place String greet(String name) { "Hello $name! Welcome to $place" }}
def greeter = new Greeter()greeter.place = "GR8Conf US"println greeter.greet("Everyone")
![Page 27: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/27.jpg)
www.tothenew.com
Demo
![Page 28: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/28.jpg)
www.tothenew.com
Let’s say you want parse an XML…
![Page 29: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/29.jpg)
www.tothenew.com
Let’s say you want parse an XML…
<langs type="current"> <language>Java</language> <language>Groovy</language> <language>Scala</language> <language>JavaScript</language></langs>
![Page 30: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/30.jpg)
www.tothenew.com
From Java to Groovy - Parsing an XML in Java
![Page 31: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/31.jpg)
www.tothenew.com
import org.xml.sax.SAXException;import org.w3c.dom.*;import javax.xml.parsers.*;import java.io.IOException; public class ParseXml { public static void main(String[] args) { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse("src/languages.xml"); //print the "type" attribute Element langs = doc.getDocumentElement(); System.out.println("type = " + langs.getAttribute("type")); //print the "language" elements NodeList list = langs.getElementsByTagName("language"); for(int i = 0 ; i < list.getLength();i++) { Element language = (Element) list.item(i); System.out.println(language.getTextContent()); } }catch(ParserConfigurationException pce) { pce.printStackTrace(); }catch(SAXException se) { se.printStackTrace(); }catch(IOException ioe) { ioe.printStackTrace(); } }}
From Java to Groovy - Parsing an XML in Java
![Page 32: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/32.jpg)
www.tothenew.com
def langs = new XmlParser().parse("/Users/puneet/groovy/gr8us/src/languages.xml")println "Type: ${langs.attribute('type')}"langs.each { println it.text() }
From Java to Groovy - Parsing an XML
![Page 33: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/33.jpg)
www.tothenew.com
def langs = new XmlParser().parse("/Users/puneet/groovy/gr8us/src/languages.xml")println "Type: ${langs.attribute('type')}"langs.each { println it.text() }
From Java to Groovy - Parsing an XML
![Page 34: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/34.jpg)
www.tothenew.com
Now, I want to generate an XML…
![Page 35: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/35.jpg)
www.tothenew.com
def xml = new groovy.xml.MarkupBuilder()xml.langs(type: "current") {
language("Java")language("Groovy")language("Javascript")language("Haskell")language("Scala")
}
From Java to Groovy - Generate an XML
http://groovy-lang.org/processing-xml.html
![Page 36: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/36.jpg)
www.tothenew.com
Operator Overloading
![Page 37: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/37.jpg)
www.tothenew.com
● Groovy supports operator overloading which makes working with Numbers, Collections, Maps and various other data structures easier to use.
def date = new Date()date++println date
● All operators in Groovy are method calls.● Various operators in Groovy are mapped onto regular Java
method calls on objects.
Operator Overloading
![Page 38: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/38.jpg)
www.tothenew.com
The following few of the operators supported in Groovy and the methods they map to● 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++ a.next()● a-- a.previous()
http://www.groovy-lang.org/operators.html#Operator-Overloading
Operator Corresponding Method Call
![Page 39: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/39.jpg)
www.tothenew.com
Groovy Closures
![Page 40: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/40.jpg)
www.tothenew.com
● A Closure is a block of code given a name.● Groovy feature that will be used the most.● Methods can accept closure as parameters.
Groovy Closures
![Page 41: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/41.jpg)
www.tothenew.com
def adder = {a, b-> a + b }
Groovy Closures…
![Page 42: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/42.jpg)
www.tothenew.com
def adder = {a, b-> a + b }
Groovy Closures…
Assign a function into a
variable
![Page 43: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/43.jpg)
www.tothenew.com
def adder = {a, b-> a + b }
Groovy Closures…
Closure parameters
![Page 44: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/44.jpg)
www.tothenew.com
def adder = {a, b-> a + b }
assert adder(1, 2) == 3
Groovy Closures…
![Page 45: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/45.jpg)
www.tothenew.com
def adder = {a, b-> a + b }
assert adder(1, 2) == 3
assert adder('a', 'b') == 'ab'
Groovy Closures…
![Page 46: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/46.jpg)
www.tothenew.com
def adder = {a, b-> a + b }
assert adder(1, 2) == 3
assert adder('a', 'b') == 'ab'
Groovy Closures…
Genericity with duck typing &
operator overloading
![Page 47: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/47.jpg)
www.tothenew.com
def intAdder = {int a, int b-> a + b }
Closures - explicit type
![Page 48: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/48.jpg)
www.tothenew.com
doubleIt = { it * 2 }
assert doubleIt(3) == 6
assert doubleIt(‘a’) == ‘aa’
Closures - implicit parameter
![Page 49: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/49.jpg)
www.tothenew.com
def sum = {... elements ->
elements.sum() }
assert sum(1,2) == 3
assert sum(‘a’, ‘b’, ‘c’) == ‘abc’
Closures - variable arguments
![Page 50: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/50.jpg)
www.tothenew.com
def mult = { int a, int b = 10 -> a * b }
assert mult(2, 3) == 6
assert mult(5) == 50
Closures - default values
![Page 51: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/51.jpg)
www.tothenew.com
def logBase10 = Math.&log10
def printer = System.out.&println
assert logBase10(10) == 1
printer ‘abc’
Closures - methods as functions
![Page 52: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/52.jpg)
www.tothenew.com
Groovy Collections
![Page 53: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/53.jpg)
www.tothenew.com
Let’s say we want to double the salary of all the employees who are having more than 4-years of experience.
Groovy Collections
![Page 54: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/54.jpg)
www.tothenew.com
class Employee {
String nameInteger experienceDouble salary
}
List<Employee> employees = []employees << new Employee(name: "John Doe", experience: 2, salary: 1000)employees << new Employee(name: "Hanna Mackey", experience: 10, salary: 3000)employees << new Employee(name: "Himanshu Seth", experience: 8, salary: 2000)employees << new Employee(name: "Roni Thomas", experience: 6, salary: 1500)employees << new Employee(name: "Bob", experience: 5, salary: 2000)
Groovy Collections…
![Page 55: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/55.jpg)
www.tothenew.com
List<Employee> premiumEmployees = employees.findAll { it.experience > 4}
.collect {
it.salary = it.salary * 2
return it
}
.sort {it.name}
premiumEmployees.each { println "Name: $it.name, Salary: $it.salary"}
Groovy Collections…
![Page 56: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/56.jpg)
www.tothenew.com
Traits are functional construct of language, which allow:● Composition of behaviours ● Runtime implementation of interfaces● Behaviour overriding ● Compatibility with static type checking/compilation
Groovy Traits
![Page 57: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/57.jpg)
www.tothenew.com
trait Greetable {void greeting() { “Welcome to GR8Conf US” }
}
Traits …
![Page 58: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/58.jpg)
www.tothenew.com
trait Greetable {void greeting() { “Welcome to GR8Conf US” }
}
class Person implements Greetable {}
Person p = new Person()assert p.greeting() == “Welcome to GR8Conf US”
Traits …
![Page 59: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/59.jpg)
www.tothenew.com
trait Greetable {String getName()void greeting() { “Hello ${getName()}! Welcome to GR8Conf US”
}}
class Person implements Greetable {String getName() { “Bob” }
}
Person p = new Person()assert p.greeting() == “Hello Bob! Welcome to GR8Conf US”
Traits - abstract methods
![Page 60: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/60.jpg)
www.tothenew.com
trait Greetable {void greeting() { “Welcome to GR8Conf US” }
}
trait Presentable {void present() { “I am presenting at GR8Conf US” }
}
Traits - composition of behaviors
![Page 61: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/61.jpg)
www.tothenew.com
trait Greetable {void greeting() { “Welcome to GR8Conf US” }
}
trait Presentable {void present() { “I am presenting at GR8Conf US” }
}
class Speaker implements Greetable, Presentable { }
Traits - composition of behaviors
![Page 62: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/62.jpg)
www.tothenew.com
trait Greetable {void greeting() { “Welcome to GR8Conf US” }
}
trait Presentable {void present() { “I am presenting at GR8Conf US” }
}
class Speaker implements Greetable, Presentable { }
def speaker = new Speaker()assert speaker.greeting() == “Welcome to GR8Conf US”assert speaker.present() == “I am presenting at GR8Conf US”
Traits - composition of behaviors
![Page 63: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/63.jpg)
www.tothenew.com
trait Greetable {void greeting() { “Welcome to GR8Conf US” }
}
class Attendee { }
Traits - runtime implementation
![Page 64: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/64.jpg)
www.tothenew.com
trait Greetable {void greeting() { “Welcome to GR8Conf US” }
}
class Attendee { }
def attendee = new Attendee()attendee.greeting()
Traits - runtime implementation
![Page 65: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/65.jpg)
www.tothenew.com
trait Greetable {void greeting() { “Welcome to GR8Conf US” }
}
class Attendee { }
def attendee = new Attendee() as Greetableattendee.greeting()
Traits - runtime implementation
![Page 66: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/66.jpg)
www.tothenew.com
trait Greetable {void greeting() { “Welcome to GR8Conf US” }
}
class Attendee implements Greetable {void greeting() { “I am very excited about GR8Conf US” }
}
Traits - overriding default behavior
![Page 67: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/67.jpg)
www.tothenew.com
trait Greetable {void greeting() { “Welcome to GR8Conf US” }
}
class Attendee implements Greetable {void greeting() { “I am very excited about GR8Conf US” }
}
def attendee = new Attendee() assert attendee.greeting() == “I am very excited about GR8Conf US”
Traits - overriding default behavior
![Page 68: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/68.jpg)
www.tothenew.com
What Next?
![Page 69: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/69.jpg)
www.tothenew.com
Groovy for Shell scripting
![Page 70: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/70.jpg)
www.tothenew.com
You know Java better than Shell scripting
Groovy for Shell scripting
![Page 71: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/71.jpg)
www.tothenew.com
Let’s write a Groovy script to count characters & words in a file…
Groovy For Shell Scripting
![Page 72: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/72.jpg)
www.tothenew.com
#!/usr/bin/env groovy
def content = new File(args[0]).textdef charCount = content.size()def wordCount = content.split(/\s/).size()
def stringCountif( args.size() == 2 ) {
stringCount = content.count(args[1])}println "Characters Count:".padRight(25) + charCountprintln "Word Count:".padRight(25) + wordCount
Groovy For Shell Scripting
![Page 73: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/73.jpg)
www.tothenew.com
Using Spock For Testing Java Classes
![Page 74: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/74.jpg)
www.tothenew.com
class LibraryTest extends Specification { def "someLibraryMethod returns true"() { setup: Library lib = new Library() when: def result = lib.someLibraryMethod() then: result == true }
}
Using Spock For Testing Java Classes
![Page 75: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/75.jpg)
www.tothenew.com
List<User> users = FollowersGraphBuilder.build { users 'John', 'Billy', 'Kate', 'Bob' user('Kate').follows 'Bob' user('Billy').follows 'Bob'
user('Bob').follows 'John'}
Groovy For DSL
![Page 76: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/76.jpg)
www.tothenew.com
Groovy Ecosystem
![Page 77: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/77.jpg)
www.tothenew.com
Questions ?
![Page 78: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/78.jpg)
www.tothenew.com
Thank you
![Page 79: Groovy for java developers](https://reader035.vdocuments.us/reader035/viewer/2022062903/58a26fd31a28ab94628b5785/html5/thumbnails/79.jpg)
www.tothenew.com
References