জাভাস্ক্রিপ্টে ভারী অপারেশনের পুনরাবৃত্তি অপ্টিমাইজেশন

পূর্ববর্তী পাঠে, ফাংশনের পুনরাবৃত্তি কল আসলে খুব কম সময় নেয় এবং আমাদের অপ্টিমাইজেশন খুব বেশি সাশ্রয় করবে না। তবে, পরিস্থিতি আরও খারাপ হবে যদি আমরা একাধিক বার একটি "ভারী" ফাংশন কল করি, যা পর্যাপ্ত দীর্ঘ সময় ধরে চলে।

ধরুন, উদাহরণস্বরূপ, আমাদের একটি ফাংশন আছে যা সংখ্যার ভাজক খুঁজে পায়:

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