Groovy memoize

memoize w groovy jest prostym sposobem na szybkie zapamiętywanie wartości obliczonych przez closure.
Jak to działa? To proste: jeśli closure dostanie za kolejnym razem te same parametry, zwróci wartość, którą już obliczyła.

Ważne:
memoize nadaje się TYLKO dla closure, które dla podanych wartści wejściowych zawsze zwracają ten sam wynik.

Nic nie robi lepiej jak przykład :)
Poniższy można uruchomić w konsoli groovy (komenda: groovyConsole w terminalu)
Przykład pokazuje, że za pierwszym razem closure wykonuje się przynajmniej 500ms (ze względu na sleep 500 oczywićcie). Każdy kolejny raz „wykonanie” jest natychmiastowe, gdyż wynik pochodzi z pamieci podręcznej (aka cache).

Oto i kod:

def mnozenie = {a, b ->
sleep 500
a * b
}.memoize()

long t

t= System.currentTimeMillis()
println mnozenie(2, 2) + " po ${System.currentTimeMillis()-t}"

t = System.currentTimeMillis()
println mnozenie(2, 2)+ " po ${System.currentTimeMillis()-t}"

t = System.currentTimeMillis()
println mnozenie(1, 2)+ " po ${System.currentTimeMillis()-t}"

    Możemy wpływać na liczbę pamietanych (cache-owanych) wyników za pomocą następujących metod (używanych zamiast standartowego memoize):

  • memoizeAtLeast(10) : zapamiętane zostanie przynajmniej 10 wyników
  • memoizeAtMost(10) : zapamiętane zostanie maksymalnie 10 wyników
  • memoizeBetween(1, 100) : zapamiętane zostanie od 1 do 100 wyników

Informacje o @albgorski

Od 1999 roku profesjonalnie zajmuję się rozwijaniem oprogramowania. Głównie Java, ale także Groovy, PHP, HTML, JavaScript oraz Adobe Flex. Fascynują mnie metody wymiany danych, ich przechowywania oraz dostępowania. Jestem WIELKIM zwolennikiem Clean Code, TDD oraz agilistą (może lepiej lean-istą). Ekosystem Java dostarcza WIELE świetnych frawework-ów i bibliotek, a społeczność miłośników języka Java jest najlepsza pod słońcem :)
Ten wpis został opublikowany w kategorii gradle, groovy, java i oznaczony tagami , , , , , . Dodaj zakładkę do bezpośredniego odnośnika.

Możliwość komentowania jest wyłączona.