Jeżeli myślisz, że JavaScript nie wspiera paradygmatu obiektowego, to jesteś w błędzie 🙂. Całkiem mocno pochylił się w jego stronę i to do stopnia jawnego wspierania klas 🥳. Słowo kluczowe "class" w języku JavaScript istnieje i to całkiem na serio 👍! A teraz poznaj szczegóły!

PADA "CLASS" W JĘZYKU JAVASCRIPT I WSZYSTKO JASNE!

Mały "polecony" dla czytelników znających dowolny język obiektowy 😄:

Drogi specjalisto od Javy, C# i tym podobnych języków obiektowych,
Jestem zmuszony uprzedzić Cię z racji tego, iż wyobraźnia może wprowadzić w błędne przeświadczenia. Klasy w języku JavaScript NIE SĄ tymi samymi klasami jakie widziałeś w innych językach! Różnią się wyglądem i składnią o wiele bardziej, niż możesz teraz przypuszczać. Proszę Cię o wzmożoną czujność i baczną obserwację podczas prezentowania przykładów jakie zostaną zawarte w niniejszej treści.

Myślę, że nie muszę się powtarzać 😊. Zaczynajmy!

JAK UTWORZYĆ KLASĘ W JĘZYKU JAVASCRIPT?

Dobra wiadomość jest taka, że jak "class" jest w języku Java i w C#, tak jest i w języku JavaScript 👇:

class MyClass {
	
}

Klamerki też takie same definiujące "pole widzenia" 👁️. Natomiast konstruktor klasy definiuje się już inaczej.

JAK UTWORZYĆ KONSTRUKTOR KLASY W JĘZYKU JAVASCRIPT?

Oto przykład wstawienia konstruktora klasy 👇:

class MyClass {
	constructor() {
		// instrukcje
	}
}

Znajdziesz go po słowie kluczowym "constructor" ℹ️. Konstruktor to metoda klasy wywoływana w chwili tworzenia obiektu na jej podstawie. Jest to pierwsza czynność wykonywana podczas "narodzin" instancji (obiektu) używając słowa kluczowego "new".

Konstruktor, jak to u wyżej wymienionych "kolegów", może przyjmować parametry do późniejszej inicjalizacji:

class MyClass {
	constructor(x, y) {
		this.x = x;
		this.y = y;
	}
}

Uwaga dla znawców innych języków 📣!

CZY MOŻNA PRZECIĄŻĄĆ KONSTRUKTOR W JĘZYKU JAVASCRIPT?

"class" w języku JavaScript nie wspiera przeciążania konstruktorów (zdefiniowanie dwóch/więcej metod o tej samej nazwie) 💥! Wtedy musisz zastosować obejście w postaci przekazania obiektu jako parametru i przypisania wartości domyślnych w przypadku nieznalezienia pożądanej wartości 🔢:

class MyClass {
	constructor(values) {
		this.x = values.x || 50;
		this.y = values.y || 100;
		this.z = values.z || 200;
	}
}

Niekonwencjonalne użycie operatora alternatywy do zwracania wartości wytłumaczyłem w artykule o boolowskim typie danych, więc sięgnij tam po wyjaśnienia, jeśli zapis jest dla Ciebie enigmatyczny 🔍.

JAK UTWORZYĆ ZMIENNE W KLASIE W JĘZYKU JAVASCRIPT?

Dane składowe (zmienne w klasie) określamy tak samo, jak w atrybutach obiektu. Piszemy tak 👇:

class MyClass {
	constructor() {
		this.x = 50;
	}
}

albo tak:

class MyClass {
	x = 50;
}

Obie formy są poprawne ✅.

JAK UTWORZYĆ FUNKCJE W KLASIE W JĘZYKU JAVASCRIPT?

Metody też mogą występować, jak w pozostałych językach wspierających paradygmat obiektowy 👍. Tutaj mała pułapka w zapisie - nie wstawiamy słowa "function", tak jak przy funkcjach "na zewnątrz" 👇:

class MyClass {
	doSomething() {
		// instrukcje
	}
}

tylko podajemy samą nazwę z parą nawiasów okrągłych dla potencjalnych parametrów ℹ️. To jest kolejny wyjątek jakim się wyróżnia "class" w języku JavaScript. I klamerki! Klamerki to rzecz niezbędna ⚠️!

Celem wywołania metody, konieczne jest utworzenie instancji obiektu, w taki sam sposób jak się to robi w innych językach obiektowych (w kolejnym nagłówku jest przykład, więc spokojnie 😅).

Wreszcie coś, co daje przewagę klasom nad obiekty ✊. Składowe mogą być też prywatne. Wiesz jak to się robi?

JAK UCZYNIĆ SKŁADOWĄ KLASY PRYWATNĄ W JĘZYKU JAVASCRIPT?

Nie, nie wstawiamy żadnych modyfikatorów dostępu, jak możesz myśleć! Robimy coś takiego 👇:

class MyClass {
	#x;
	
	#doSomething() {
		// instrukcje
	}
}

Znak krzyżyka (ang. hash) przed nazwą czyni składową prywatną (niedostępną na zewnątrz) 🔒. Dotyczy to zarówno pól, jak i metod. Da to taki efekt, że nie będzie można się odwołać do składowej prywatnej na zewnątrz kodu.

DLACZEGO POWINNIŚMY UKRYWAĆ ZMIENNE KLASY PRZED PUBLICZNYM DOSTĘPEM?

Ukrywanie implementacji jest istotną rzeczą w programowaniu obiektowym ❗. Jednym zdaniem - dobrze napisany kod jako udostępniany dla innych osób to taki, który nie ujawnia szczegółów implementacji (żadna zmienna nie jest dostępna publicznie oraz żadna z nazw publicznych metod nie mówi niczego na temat użytych typów danych). Powodem jest zminimalizowanie wprowadzenia niezbędnych edycji przez użytkownika naszego kodu po jego stronie 🔥.

Przykładowo, możemy zaimplementować metodę do wyznaczania N-tego argumentu funkcji kwadratowej. Jak możesz wiedzieć jest kilka postaci funkcji, a ja na potrzeby przykładu podkreślę dwie: postać ogólna i kanoniczna. Teraz wyobraź sobie, że udostępniasz innej osobie klasę do obsługi funkcji kwadratowej z metodą do wyznaczania N-tego argumentu przy użyciu postaci ogólnej.

"Zasłonięcie" składowych klasy (zmiennych w klasie) oznacza, że osoba która korzysta z Twojego kodu, nie będzie narażona na błędy, gdyby skorzystała z tych zmiennych bezpośrednio w swoim kodzie ❌. Dzięki udostępnieniu na światło dzienne tylko samej metody, możesz bezpiecznie zmienić jej sposób wyznaczania wartości np. zmiana na postać kanoniczną funkcji kwadratowej, tak że inni nie będą musieli zmieniać ani linijki kodu u siebie ✅.

To o to chodzi 🙂!

Ostatnia rzecz - tworzenie obiektu na podstawie klasy 🔥.

JAK UTWORZYĆ OBIEKT POCHODZĄCY OD KLASY W JĘZYKU JAVASCRIPT?

Robimy to tak samo, jak w wielu innych językach 😉. Używamy słowa "new" 👇:

const myClassInstance = new MyClass();

Od tej pory, możemy tak samo odwoływać się do wszystkich składowych, o ile nie są prywatne ⚠️!

Słowo kluczowe "class" w języku JavaScript

Klasa może zostać utworzona w języku JavaScript przy pomocy tego samego słowa jakie możesz znać z innych języków: "class"!


Artykuł nieduży lecz wartościowy ⭐. Garść informacji i przykładów 📖. To Ci powinno wystarczyć, aby wiedzieć jak z tego skorzystać i się nie przestraszyć 😄!

PODOBNE ARTYKUŁY