JavaScript'те оор операцияларды кайталоону оптималдаштыруу

Өткөн сабакта функцияларды кайра-кайра чакыруу чындыгында өтө аз убакытты талап кылат жана биздин оптималдаштыруубуз абдан көп үнемдөө жаратпайт. Бирок, бир нече жолу узакка созулуучу "оор" функцияны чакырсак, абал андан да начар болот.

Мисалга, сандын бөлүүчүлөрүн тапкан функция бар деп коёлу:

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