Poznajemy short-circuiting w JavaScript – sposób na wywoływanie funkcji przy użyciu operatorów logicznych. Nie jest to tylko „sztuczka” czy jakaś ciekawostka, ale coś, co bywa realnie wykorzystywane – szczególnie w frameworku React.

W JavaScript (oraz wielu innych językach programowania) istnieje sposób wywoływania dwóch (lub więcej) funkcji w taki sposób, że wywoływana jest pierwsza i tylko wtedy, gdy zwróci ona wartość prawdziwą, wywoływana jest następna.

I tym sposobem nie jest tworzenie bloków warunkowych if-else (to znaczy – możemy je tworzyć i w ten sposób osiągnąć ten efekt) ale wspomniany w tytule short circuit evaluation.

Przykład użycia

Na początku stworzymy funkcję konstruktora dla obiektów Person:

 <script>
        function Person(name, age) {
        this.name = name;
        this.age = age;
        this.drunk = false;
        }
    </script>

Podajemy imię i wiek, dostajemy obiekt Person z takim imieniem i wiekiem oraz wartością drunk (pijany) ustawioną na false.

Teraz dodajemy funkcje get_drunk i is_adult. Dodajemy je do prototypu Person:

Person.prototype.getDrunk = function(){
        this.drunk = true;
        }
Person.prototype.isAdult = function() {
        return this.age >= 18;
        }

Dodajemy do prototypu a nie do obiektu, ponieważ wtedy te funkcje istnieją 1 raz, w prototypie, zamiast istnieć w każdym obiekcie Person.

Każdy obiekt Person ma swoje name, age i drunk, ale funkcje getDrunk i isAdult są takie same dla każdego obiektu i nie ma sensu tworzyć ich w funkcji konstruktora, dodajemy do prototypu – funkcje istnieją tylko raz.

Teraz pora stworzyć kilka obiektów Person:

let john = new Person("John", 30);
let bob = new Person("Bob", 13);

I teraz tak: wywołajmy sobie na tych obiektach getDrunk, ale tylko wtedy, gdy isAdult zwraca prawdę. Służy do tego operator logiczny „&&” (and) pomiędzy wywoływanymi funkcjami:

john.isAdult() && john.getDrunk();
console.log(john.drunk);
//true

Jako że John jest dorosły (isAdult zwraca true) funkcja getDrunk się wywołuje.

Teraz Bob:

bob.isAdult() && bob.getDrunk();
console.log(bob.drunk);
//false

Bob ma 13 lat. To mniej niż 18. Funkcja po lewej (isAdult) zwraca false, a co za tym idzie, funkcja po prawej nie jest wykonywana, co widzimy w console.logu.

I tak to działa. Wystarczy znaleźć do tego triku dobre zastosowania (tego rodzaju sposób wywoływania funkcji często jest spotykany na przykład w frameworku React).

Do następnego razu!