вот тебе кривое обьяснение зачем такое надо
Type TBlablabla
....
Field CachedObject:TObject
Method GetCacheFunction:TObject()
if CachedObject = null then CachedObject = GetFunction()
return CachedObject
End Method
Method FreeCacheFunction()
CachedObject = null
End Method
Method GetFunction:TObject()
'в етой функции каким-то образом получаем нужный обьект
..
return obj
End Method
Method Update()
local obj:TObject
obj = GetCacheFunction() 'тут у нас вызывается GetFunction()
obj = GetCacheFunction() 'а тут мы уже берем кешируемое значение
obj = GetCacheFunction() 'тут тоже самое
obj = GetCacheFunction()
obj = GetCacheFunction()
FreeCacheFunction() 'обычно кеш очищают если что-то изменилось
'но для примера будем очищать его в конце обновления
End Method
....
End Type
тоесть в принципе ето тоже самое что записать результат вычеслений
функции в переменную и потом юзать только ету переменную, а не функцию
но в данном случае все намного удобнее выглядит
мне такой подход понадобился только внутри TList, пришлось там
несколько функции зделать кешируемыми
хотя я особой оптимизацией игры не занимался, спокойно можно
перебирать все обьекты раз 10 за цикл не особо беспокоясь о производительности