JavaScriptда огир операцияларни такрорлашни оптимизациялаш
Олдинги дарсда функцияларни такрорланган чақиришлар аслинда жуда оз вакт олади ва бизнинг оптимизациямиз жуда кўп тежамайди. Бирок, ҳолат айни замонда анча ёмонрок бўлади, агар биз бир неча mарта "огир" функцияни чақирсак, у ужарли вакт davomida бажарилади.
Мисол учун, бизда соннинг бўлувчиларини топадиган функция бор дейлик:
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;
}