JavaScript-те ауыр операцияларды қайталауды оңтайландыру
Алдыңғы сабақта функцияларды қайта шақыру шынымен де өте аз уақыт алады және біздің оңтайландырумыз өте көп үнемдемейді. Дегенмен, біз бірнеше рет орындау ұзақ уақытты алатын "ауыр" функцияны шақырсақ, жағдай әлдеқайда нашар болады.
Мысалы, бізде санның бөлгіштерін табатын функция бар делік:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Бұл функцияның жеткілікті "ауыр" екені анық. Сондықтан мынадай код жазу нашар идея болады:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Әрине, "ауыр" операцияны бір рет орындап, нәтижені айнымалыға жазып қойған, содан кейін сол айнымалыны қажетті жерлерде пайдаланған әлдеқайда жақсы:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Төмендегі кодты оңтайландырыңыз:
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;
}