Optimalisatie van het herhalen van zware operaties in JavaScript
In de vorige les namen herhaalde functieaanroepen eigenlijk heel weinig tijd in beslag en onze optimalisatie zou niet erg veel besparen. Echter, het wordt veel erger als we meerdere keren een "zware" functie aanroepen, die een behoorlijke tijd nodig heeft om uit te voeren.
Stel, we hebben bijvoorbeeld een functie die delers van een getal vindt:
javascriptfunction getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Het is duidelijk dat deze functie behoorlijk "zwaar" is. Daarom is het een slecht idee om code zoals deze te schrijven:
javascriptlet num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Het is beter om de "zware" operatie eenmaal uit te voeren en het resultaat op te slaan in een variabele, en dan deze variabele te gebruiken waar nodig:
javascriptlet num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Задание 1
Optimaliseer de onderstaande code:
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;
}