Optimalizácia opakovania ťažkých operácií v JavaScripte

V predchádzajúcej lekcii opakované volania funkcií v skutočnosti zaberajú veľmi málo času a naša optimalizácia ušetrí nie veľa. Avšak, všetko bude oveľa horšie, ak budeme niekoľko krát volať "ťažkú" funkciu, ktorá vykonáva sa dostatočne dlhý čas.

Nechajme, napríklad, máme funkciu, ktorá nachádza delitele čísla:

javascriptfunction getDivisorsSum(num) {
  let res = 0;
  
  for (let i = 1; i <= num; i++) {
    if (num % i === 0) {
      res += i;
    }
  }
  
  return res;
}

Je zrejmé, že táto funkcia je dostatočne "ťažká". Preto zlým nápadom bude napísať takýto kód:

javascriptlet num = 123456;

if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
  console.log('+++');
} else {
  console.log('---');
}

Samozrejme, lepšie je vykonať "ťažkú" operáciu raz a výsledok zapísať do premennej, a potom použiť túto premennú na potrebných miestach:

javascriptlet num = 123456;
let sum = getDivisorsSum(num);

if (sum >= 10 && sum <= 100) {
  console.log('+++');
} else {
  console.log('---');
}
Задание 1

Optimalizujte nižšie uvedený kód:

javascriptlet num = 1233456789;

if (getSumSquare(num) >= 10 && getSumSquare(num) <= 100) {
  console.log('+++');
} else {
  console.log('---');
}

function getSumSquare(num) {
  let digits = String(num).split('');
  let sum = 0;
  
  for (let digit of digits) {
    sum += digit ** 2;
  }
  
  return sum;
}