Optimalizácia opakujúcich sa operácií v JavaScripte

Začiatoční programátori často bezmyšlienkovite volajú tú istú funkciu niekoľkokrát, čím míňajú zdroje.

Pozrime sa na príklad. Nech je daný reťazec, ktorý obsahuje nejakú cestu:

javascriptlet path = 'img.png';

Predpokladajme, že máme za úlohu skontrolovať, či cesta končí na príponu .png alebo .jpg. Nejaký začiatočník programátor napísal nasledujúce riešenie:

javascriptlet path = 'img.png';

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

Čo je zlé na tomto riešení? Problém je, že metóda slice je volaná dvakrát, pričom robí to isté. To, samozrejme, nie je optimálne.

Pre optimalizáciu je potrebné vykonať odrezanie reťazca raz, uložiť výsledok do premennej a potom použiť túto premennú ďalej:

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

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

Optimalizujte nižšie uvedený kód:

javascriptlet num = 123;

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

Optimalizujte nižšie uvedený kód:

javascriptlet date = new Date();

if (date.getDay() === 0 || date.getDay() === 6) {
  console.log('weekend');
} else {
  console.log('weekday');
}
Задание 3

Optimalizujte nižšie uvedený kód:

javascriptlet date = new Date();
let res;

if (date.getFullYear() >= 2020 && date.getFullYear() <= 2030) {
  res = 'year ' + date.getFullYear() + ' fits';
} else {
  res = 'year ' + date.getFullYear() + ' doesn't fit';
}

console.log(res)