Βελτιστοποίηση Επαναλαμβανόμενων Λειτουργιών στο JavaScript

Συχνά, οι αρχάριοι προγραμματιστές κάνουν αλόγιστα κλήση της ίδιας συνάρτησης πολλές φορές, σπαταλώντας πόρους.

Ας δούμε ένα παράδειγμα. Ας υποθέσουμε ότι μας δίνεται μια συμβολοσειρά που περιέχει κάποια διαδρομή:

javascriptlet path = 'img.png';

Ας υποθέσουμε ότι έχουμε το καθήκον να ελέγξουμε αν η διαδρομή τελειώνει με την επέκταση .png ή .jpg. Κάποιος αρχάριος προγραμματιστής έγραψε την ακόλουθη λύση:

javascriptlet path = 'img.png';

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

Τι είναι λάθος με αυτήν τη λύση; Το πρόβλημα είναι ότι η μέθοδος slice καλείται δύο φορές, κάνοντας το ίδιο πράγμα. Αυτό, φυσικά, δεν είναι βέλτιστο.

Για βελτιστοποίηση, πρέπει να αποκοπεί η συμβολοσειρά μία φορά, να αποθηκευτεί το αποτέλεσμα σε μια μεταβλητή και στη συνέχεια να χρησιμοποιηθεί αυτή η μεταβλητή παρακάτω:

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

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

Βελτιστοποιήστε τον παρακάτω κώδικα:

javascriptlet num = 123;

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

Βελτιστοποιήστε τον παρακάτω κώδικα:

javascriptlet date = new Date();

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

Βελτιστοποιήστε τον παρακάτω κώδικα:

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)