JavaScriptда огир операцияларни такрорлашни оптимизациялаш

Олдинги дарсда функцияларни такрорланган чақиришлар аслинда жуда оз вакт олади ва бизнинг оптимизациямиз жуда кўп тежамайди. Бирок, ҳолат айни замонда анча ёмонрок бўлади, агар биз бир неча mарта "огир" функцияни чақирсак, у ужарли вакт davomida бажарилади.

Мисол учун, бизда соннинг бўлувчиларини топадиган функция бор дейлик:

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

Аниқки, бу функция жуда "огир". Шунинг учун ёмон идея бўларди ўша кодни шундай ёзиш:

javascriptlet num = 123456;

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

Албатта, яхшироқ бўлар эди, "огир" операцияни бир марта бажариб, натижани ўзгарувчига ёзиб қўйиш, сўнг керакли жойларда ўша ўзгарувчидан фойдаланиш:

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

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

Қуйидаги коди оптимизацияланг:

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;
}