[groovy]do-whileの書き方

  未分類

groovyにはdo-while構文がありません。javaにはあるのであえて捨てたということなのでしょう。

とりあえず1回実行、エラーならリトライ、みたいな処理で便利に使っていたのですが、逆に言うとそれくらいしか用途が無いということなのかも。。

groovyでの書き方ですがクロージャを使うと割とスッキリ書けるようです。

This is the closest it can get to purely language syntax based do-while in Groovy: —
The last statement within curly braces (within closure) is evaluated as a loop exit condition.

loops – Elegant way for do … while in groovy – Stack Overflow
while ({
    x.doIt()
    !x.isFinished()
}()) continue

クロージャの最後の式の評価値が戻り値となるので、繰り返すべきならtrueを返すようにすると。そうすると whileの評価式が true になり contiue、つまり繰り返しになります。

クロージャの中身が多いときはインラインで書かずに別途定義する方法がよさそうですね。

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

while (somethingToDo(x)) continue

LEAVE A COMMENT