JavaScript-də Ağır Əməliyyatların Təkrarının Optimallaşdırılması
Əvvəlki dərsdə funksiyaların təkrar çağırışları əslində çox az vaxt alır və bizim optimallaşdırmamız çox da çox qənaət etməyəcək. Lakin, vəziyyət daha pisləşəcək, əgər biz bir neçə dəfə kifayət qədər uzun müddət çalışan "ağır" funksiyanın çağırışını etsək.
Məsələn, tutaq ki, bizim ədədin bölənlərini tapan funksiyamız var:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Aydındır ki, bu funksiya kifayət qədər "ağırdır". Ona görə də belə bir kod yazmaq pis fikirdir:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Əlbəttə ki, daha yaxşısı "ağır" əməliyyatı bir dəfə yerinə yetirmək və nəticəni dəyişəndə yazmaq, sonra isə bu dəyişəni lazım olan yerlərdə istifadə etməkdir:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Aşağıdakı kodu optimallaşdırın:
let 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;
}