Optimasi Pengulangan Operasi Berat dalam JavaScript

Dalam pelajaran sebelumnya, pemanggilan fungsi berulang sebenarnya membutuhkan waktu yang sangat sedikit dan optimasi kita tidak akan menghemat banyak. Namun, segala sesuatu akan menjadi jauh lebih buruk jika kita beberapa kali memanggil fungsi "berat" yang dieksekusi dalam waktu yang cukup lama.

Misalnya, kita memiliki fungsi yang menemukan pembagi angka:

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

Jelas bahwa fungsi ini cukup "berat". Oleh karena itu, ide yang buruk adalah menulis kode seperti ini:

javascriptlet num = 123456;

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

Tentu saja, lebih baik melakukan operasi "berat" sekali saja dan mencatat hasilnya dalam variabel, lalu menggunakan variabel ini di tempat yang dibutuhkan:

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

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

Optimalkan kode di bawah ini:

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