Groovy sample code

satya - 7/19/2018, 2:39:27 PM

Printing a collection objects in groovy

Printing a collection objects in groovy

Search for: Printing a collection objects in groovy

satya - 7/19/2018, 3:24:09 PM

Examples


//from a list
def list = ["A", "B", "C"]
for (item in list) {
   println item
}

//another
for (number in 1..3 ) {
    println number
}

//a map
def map = [a1:'b1', a2:'b2']
for ( item in map ) {
    println item.key 
}

//each syntax using closures
def list = ["A", "B"]
list.each {
	println it
}

//syntactic sugar
(1..3).each {
	println it
}

//with indexed closures
def list = ["A", "B", "C"]
list.eachWithIndex { val, idx ->
   println "${idx}. ${val}"
}

satya - 7/23/2018, 12:49:00 PM

working with maps in groovy

working with maps in groovy

Search for: working with maps in groovy

satya - 7/23/2018, 1:04:04 PM

Groovy program structure is here

Groovy program structure is here

satya - 7/23/2018, 1:08:54 PM

Here is an example messing with dynamic properties


package com.ai.groovy.learn.test1

class GroovyTest2 {

   def propMap = [:]
   
   def String get(String name)
   {
      propMap[name];
   }
   def String set(String name, String value)
   {
      propMap[name] = value;
      println "set method called ${name}:${value}"
   }
   
   static void main(String... args)
   {
      println "hello world"
      
      GroovyTest2 gc = new GroovyTest2();
      gc.p1 = "hello"
      gc.p2 = "why"
      
      println "done ${gc.p2}"
   }
}

satya - 7/23/2018, 1:09:45 PM

How are get and set method are resolved dynamically in groovy?

How are get and set method are resolved dynamically in groovy?

Search for: How are get and set method are resolved dynamically in groovy?

satya - 7/23/2018, 1:12:22 PM

what is def in groovy?

what is def in groovy?

Search for: what is def in groovy?

satya - 7/23/2018, 1:12:31 PM

This is explained in style guide

This is explained in style guide

satya - 7/23/2018, 1:19:46 PM

Native syntax for data structures


def mylist = []
def mymap = [:]
By default keys are strings
Strings don't have to be quoted as a key
def map = [CA: 'California', MI: 'Michigan']

satya - 7/23/2018, 1:21:17 PM

def as a type signature of a property


def var1;
var1 = "string";
var1 = 5

//similar to
Object var1;

satya - 7/23/2018, 1:22:48 PM

In the code above the def is redundant!!!

In the code above the def is redundant!!!

satya - 7/23/2018, 1:23:54 PM

So this code is better


package com.ai.groovy.learn.test1

class GroovyTest2 {

   private def propMap = [:]
   
   String get(String name)
   {
      propMap[name];
   }
   
   String set(String name, String value)
   {
      propMap[name] = value;
      println "set method called ${name}:${value}"
   }
   
   static void main(String... args)
   {
      println "hello world"
      
      GroovyTest2 gc = new GroovyTest2();
      gc.p1 = "hello"
      gc.p2 = "why"
      
      println "done ${gc.p2}"
   }
}

satya - 7/23/2018, 1:29:52 PM

Take a look


abstract class Abstract {         
    String name

    abstract def abstractMethod() 

    def concreteMethod() {
        println 'concrete'
    }
}

satya - 7/23/2018, 1:32:42 PM

Notes

1. The "def" means the method returns an object of any type

2. the last line apparently returns without a return

satya - 7/23/2018, 1:32:59 PM

return type of println in groovy

return type of println in groovy

Search for: return type of println in groovy

satya - 7/23/2018, 1:35:36 PM

Methods in groovy are explained here as part of object orientation

Methods in groovy are explained here as part of object orientation

satya - 7/23/2018, 1:39:41 PM

println returns void

println returns void

satya - 7/23/2018, 1:40:04 PM

So the following code returns a null when defined with def


package com.ai.groovy.learn.test1

class GroovyTest2 {

   private def propMap = [:]
   
   String get(String name)
   {
      propMap[name];
   }
   
   String set(String name, String value)
   {
      propMap[name] = value;
      println "set method called ${name}:${value}"
   }
   
   def f1()
   {
      println "f1 called"
   }
   static void main(String... args)
   {
      println "hello world"
      
      GroovyTest2 gc = new GroovyTest2();
      gc.p1 = "hello"
      gc.p2 = "why"
      
      println "done ${gc.p2}"
      
      //it seem to return a null
      println gc.f1()
   }
}

satya - 7/23/2018, 1:47:29 PM

On Groovy at Quotra

On Groovy at Quotra

satya - 7/23/2018, 1:55:00 PM

How are gets and sets resolved in Groovy?

How are gets and sets resolved in Groovy?

Search for: How are gets and sets resolved in Groovy?

satya - 10/31/2019, 12:30:20 PM

Method call conventions and omitting parentheses is explained in the style guide. Here is the link again

Method call conventions and omitting parentheses is explained in the style guide. Here is the link again

satya - 10/31/2019, 12:37:20 PM

Few key notes from there: No parentheses


//Same
println ("hello")
println "hello"

method(a,b)
method a, b

satya - 10/31/2019, 12:37:58 PM

If the last argument is a closure


list.each( { println it } )
list.each(){ println it }
list.each  { println it }

satya - 10/31/2019, 12:40:36 PM

getters and setters are automatic


class Person {
    String name
}

satya - 10/31/2019, 12:42:36 PM

Easy constructors


class Server {
    String name
    Cluster cluster
}


def server = new Server(name: "Obelix", 
                cluster: aCluster)

satya - 10/31/2019, 12:43:24 PM

This is nice: with


server.name = application.name
server.status = status
server.sessionCount = 3
server.start()
server.stop()

vs:

server.with {
    name = application.name
    status = status
    sessionCount = 3
    start()
    stop()
}

satya - 10/31/2019, 2:07:48 PM

String surprises: Single quotes will not expand the string and behaves like Java


x = "xstring"

//wrong: will print abc $(x)
//because it is not in double quotes
print 'abc $(x)'

satya - 10/31/2019, 2:09:04 PM

What you want is double quotes to expand $ sign


print "abc $(x)"

//still wrong because you need to use {} and not ()

//correct one

print "abc ${x}"

//not that will print correctly

abc xstring