Korduvate operatsioonide optimeerimine JavaScriptis

Sageli teevad algajad programmeerijad mõtlematult sama funktsiooni mitut korda välja kutsudes ressursse raiskades.

Vaatame näidet. Olgu meil antud string, mis sisaldab mingit teed:

javascriptlet path = 'img.png';

Olgu meie ülesandeks kontrollida, kas tee lõpeb laiendiga .png või .jpg. Mõni algaja programmeerija kirjutas järgmise lahenduse:

javascriptlet path = 'img.png';

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

Mis selle lahendusega on valesti? Probleem on selles, et meetodit slice kutsutakse kaks korda välja, tehes sama asja. See pole muidugi optimaalne.

Optimeerimiseks tuleb stringi lõikamine teha üks kord, tulemus kirjutada muutujasse ja seejärel kasutada seda muutujat edaspidi:

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

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

Optimeerige allolev kood:

javascriptlet num = 123;

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

Optimeerige allolev kood:

javascriptlet date = new Date();

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

Optimeerige allolev kood:

javascriptlet date = new Date();
let res;

if (date.getFullYear() >= 2020 && date.getFullYear() <= 2030) {
  res = 'aasta ' + date.getFullYear() + ' sobib';
} else {
  res = 'aasta ' + date.getFullYear() + ' ei sobi';
}

console.log(res)