memoized method

VarArgsFunction<T> memoized()

Creates a memoized version of this function that caches results.

This is useful for expensive computations:

var fibonacci = VarArgsFunction<int>((args, _) {
  int n = args[0];
  if (n <= 1) return n;
  return fib(n - 1) + fib(n - 2);
}).memoized();

print(fibonacci(30)); // Fast, even for large values

Implementation

VarArgsFunction<T> memoized() {
  final cache = <String, T>{};

  return VarArgsFunction<T>((args, kwargs) {
    // Create a cache key from the arguments
    final key = '${args.toString()}|${kwargs.toString()}';

    if (!cache.containsKey(key)) {
      cache[key] = callback(args, kwargs);
    }

    return cache[key]!;
  });
}