Pasikartojančių operacijų optimizavimas JavaScript

Dažnai pradedantys programuotojai be galvų iškviečia tą pačią funkciją kelis kartus, eikvodami resursus.

Pažiūrėkime į pavyzdį. Tarkime, mums duota eilutė, kurioje yra kažkoks kelias:

javascriptlet path = 'img.png';

Tarkime, mes turime užduotį patikrinti, ar kelias baigiasi plėtiniu .png ar .jpg. Kažkoks pradedantis programuotojas parašė šį sprendimą:

javascriptlet path = 'img.png';

if (path.slice(-4) === '.png' || path.slice(-4) === '.jpg') {
  console.log('+++');
} else {
  console.log('---');
}

Kas negerai su šiuo sprendimu? Problema ta, kad metodas slice iškviečiamas du kartus, darydamas tą patį. Tai, žinoma, neoptimalu.

Optimizuoti reikia atlikti eilutės nukirpimą vieną kartą, įrašyti rezultatą į kintamąjį, o tada naudoti tą kintamąjį toliau:

javascriptlet path = 'img.png';
let ext  = path.slice(-4);

if (ext === '.png' || ext === '.jpg') {
  console.log('+++');
} else {
  console.log('---');
}
Задание 1

Optimizuokite žemiau pateiktą kodą:

javascriptlet num = 123;

if (String(num)[0] === '1' || String(num)[0] === '2') {
  console.log('+++');
} else {
  console.log('---');
}
Задание 2

Optimizuokite žemiau pateiktą kodą:

javascriptlet date = new Date();

if (date.getDay() === 0 || date.getDay() === 6) {
  console.log('savaitgalis');
} else {
  console.log('savaitės diena');
}
Задание 3

Optimizuokite žemiau pateiktą kodą:

javascriptlet date = new Date();
let res;

if (date.getFullYear() >= 2020 && date.getFullYear() <= 2030) {
  res = 'metai ' + date.getFullYear() + ' tinka';
} else {
  res = 'metai ' + date.getFullYear() + ' netinka';
}

console.log(res)