Skip to: Site menu | Main content

Groovy 

      Download | Documentation | Developers | Community

An agile dynamic language for the Java Platform

Logical Branching Add comment to Wiki View in Wiki Edit Wiki page Printable Version

if - else statement

Groovy supports the usual if - else syntax from Java

def x = false
def y = false

if ( !x ) {
    x = true
}

assert x == true

if ( x ) {
    x = false
} else {
    y = true
}

assert x == y

Groovy also supports the normal Java "nested" if then else if syntax:

if ( ... ) {
...
} else if (...) {
...
} else {
...
}

ternary operator

Groovy also supports the ternary operator:

def y = 5
def x = (y > 1) ? "worked" : "failed"
assert x == "worked"

See also: the elvis operator

switch statement

The switch statement in Groovy is backwards compatible with Java code; so you can fall through cases sharing the same code for multiple matches.

One difference though is that the Groovy switch statement can handle any kind of switch value and different kinds of matching can be performed.

def x = 1.23
def result = ""

switch ( x ) {
    case "foo":
        result = "found foo"
        // lets fall through

    case "bar":
        result += "bar"

    case [4, 5, 6, 'inList']:
        result = "list"
        break

    case 12..30:
        result = "range"
        break

    case Integer:
        result = "integer"
        break

    case Number:
        result = "number"
        break

    default:
        result = "default"
}

assert result == "number"

Switch supports the following kinds of comparisons

  • Class case values matches if the switchValue is an instanceof the class
  • Regular expression case value matches if the string of the switchValue matches the regex
  • Collection case value matches if the switchValue is contained in the collection. This also includes ranges too (since they are Lists)
  • if none of the above are used then the case value matches if the case value equals the switch value

How switch works

The case statement performs a match on the case value using the isCase(switchValue) method, which defaults to call equals(switchValue) but has been overloaded for various types like Class or regex etc.

So you could create your own kind of matcher class and add an isCase(switchValue) method to provide your own kind of matching.