loopsgroovydo-while

Elegant way for do ... while in groovy


How to do code something like this in groovy?

do {

  x.doIt()

} while (!x.isFinished())

Because there is no do ... while syntax in groovy.

No 'do ... while()' syntax as yet.

Due to ambiguity, we've not yet added support for do .. while to Groovy

References:


Solution

  • This is the closest it can get to purely language syntax based do-while in Groovy:

    while ({
        x.doIt()
        !x.isFinished()
    }()) continue
    

    The last statement within curly braces (within closure) is evaluated as a loop exit condition.

    Instead of continue keyword a semicolon can be used.

    Additional nice thing about it, loop can be parametrized (kind of), like:

    Closure<Boolean> somethingToDo = { foo ->
        foo.doIt()
        !foo.isFinished()
    }
    

    and then elsewhere:

    while (somethingToDo(x)) continue
    

    Formerly I've proposed this answer over here: How do I iterate over all bytes in an inputStream using Groovy, given that it lacks a do-while statement?