Groovy言語のトレーニング資料をいくつか書いていて、クロージャを説明する例を準備しています。この例は、「高価な」メソッドの単純なキャッシュクロージャです。withCache
def expensiveMethod( Long a ) {
withCache (a) {
sleep(rnd())
a*5
}
}
それで、今私の質問は、次の2つの実装のどちらが、Groovyで最も速く、より慣用的なものになるでしょうか?
def withCache = {key, Closure operation ->
if (!cacheMap.containsKey(key)) {
cacheMap.put(key, operation())
}
cacheMap.get(key)
}
また
def withCache = {key, Closure operation ->
def cached = cacheMap.get(key)
if (cached) return cached
def res = operation()
cacheMap.put(key, res)
res
}
最初の例は変数を使用しないため、私は好みますが、のget
メソッドへのアクセスはMap
、計算結果を含む変数を返すよりも遅いのではないかと思います。
答えは「大きさにもよるMap
」ですが、好奇心からコミュニティの意見を伺いたいと思います。
ありがとう!