Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Some examples (inspired by the Java Enum Tutorial):

Code Block

enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY
}

def tellItLikeItIs(Day day) {
    switch (day) {
        case Day.MONDAY:
            println "Mondays are bad."
            break
        case Day.FRIDAY:
            println "Fridays are better."
            break
        case Day.SATURDAY:
        case Day.SUNDAY:
            println "Weekends are best."
            break
        default:
            println "Midweek days are so-so."
            break
    }
}

tellItLikeItIs(Day.MONDAY)      // => Mondays are bad.
tellItLikeItIs(Day.WEDNESDAY)   // => Midweek days are so-so.
tellItLikeItIs(Day.FRIDAY)      // => Fridays are better.
tellItLikeItIs(Day.SATURDAY)    // => Weekends are best.

Or with a bit of refactoring, you could write the switch like this:

Code Block

def today = Day.SATURDAY
switch (today) {
     // Saturday or Sunday
     case [ Day.SATURDAY, Day.SUNDAY ]:
         println "Weekends are cool"
         break
     // a day between Monday and Friday
     case Day.MONDAY..Day.FRIDAY:
         println "Boring work day"
         break
     default:
         println "Are you sure this is a valid day?"
}

Here is a coin example:

Code Block

enum Coin {
    penny(1), nickel(5), dime(10), quarter(25)
    Coin(int value) { this.value = value }
    private final int value
    public int value() { return value }
}

assert Coin.values().size() == 4

def pocketMoney = 2 * Coin.quarter.value() + 5 * Coin.dime.value()
assert pocketMoney == 100

// another way to do above
def coins = [ Coin.quarter ] * 2 + [ Coin.dime ] * 5
println coins // => [ quarter, quarter, dime, dime, dime, dime, dime ]
println coins.sum{ it.value() } // => 100

Here is a planet example:

Code Block

enum Planet {
    MERCURY(3.303e+23, 2.4397e6),
    VENUS(4.869e+24, 6.0518e6),
    EARTH(5.976e+24, 6.37814e6),
    MARS(6.421e+23, 3.3972e6),
    JUPITER(1.9e+27, 7.1492e7),
    SATURN(5.688e+26, 6.0268e7),
    URANUS(8.686e+25, 2.5559e7),
    NEPTUNE(1.024e+26, 2.4746e7)
    private final double mass // in kilograms
    private final double radius // in metres
    Planet(double mass, double radius) {
        this.mass = mass
        this.radius = radius
    }
    private double mass() { return mass }
    private double radius() { return radius }
    // universal gravitational constant (m3 kg-1 s-2)
    public static final double G = 6.67300E-11
    double surfaceGravity() { return G * mass / (radius * radius) }
    double surfaceWeight(double otherMass) { return otherMass * surfaceGravity() }
}

double earthWeight = 75.0 // kg
double mass = earthWeight/Planet.EARTH.surfaceGravity()
for (p in Planet.values()) {
    printf("Your weight on %s is %f%n", p, p.surfaceWeight(mass))
}


// =>
// Your weight on MERCURY is 28.331821
// Your weight on VENUS is 67.874932
// Your weight on EARTH is 75.000000
// Your weight on MARS is 28.405289
// Your weight on JUPITER is 189.791814
// Your weight on SATURN is 79.951165
// Your weight on URANUS is 67.884540
// Your weight on NEPTUNE is 85.374605

Note: there are currently issues with using Groovy enums in conjunction with GroovyShell. Best bet would be to check Jira if you are having problems, e.g. http://jira.codehaus.org/browse/GROOVY-2135