groovy – Memoized functions

Memoizing is basically a way to cache method results. This can be useful when a method is often called with the same arguments and the calculation of the result takes time, therefore increasing performance.

Starting from Groovy 2.2, methods can be annoted with the @Memoized annotation.

Imagine the following class:

class MemoDemo {
  def timesCalculated = 0

  @Memoized
  def power2(a) {
    timesCalculated++
    a * a
  }
}

Now upon the first call of this method with a number it hasnt been called with before, the method will be executed:

assert power2(2) == 4
assert timesCalculated == 1

However, if we call it again with the same argument:

assert power2(2) == 4
assert timesCalculated == 1

timesCalculated has remained unchanged, yet the method returned the same result. However, calling it with a different argument:

assert power2(3) == 9
assert timesCalculated == 2

results in the body of the method being called again.

if you want to reproduce, please indicate the source:
groovy – Memoized functions - CodeDay