od Podstaw
1 godz. 54 min · Typescript · Full-stack i Programowanie
Adam GospodarczykZacznijmy od tego, że JavaScript jest dynamicznie typowany. Oznacza to, że typy zmiennych mogą się zmieniać w czasie wykonywania programu, a my nie mamy nad nimi kontroli. A po co nam ta kontrola? Między innymi po to, aby przypadkowo nie dodać typu number do string lub przekazać do funkcji nieprawidłowe danych. Ogromną zaletą jest to, że o tego typu błędach dowiadujemy się już na etapie pisania kodu a nie dopiero w trakcie jego wykonywania... na produkcji.
Prawdopodobnie znasz mechanizm intellisense, czyli inteligentnego podpowiadania kodu przez edytor. Pisząc kod w TypeScript, tworzysz definicje typów dotyczących Twojej aplikacji. W ten sposób dostęp do definicji klas i właściwości obiektów masz właściwie na wyciągnięcie myszki. Wystarczy "hover" na funkcji aby uzyskać szczegółowe informacje, które pomogą Ci w pisaniu kodu. Oprócz tego otrzymasz również automatyczne podpowiedzi w trakcie dostępu do właściwości i metod. Nic tylko pisać kod!
Nie musisz przepisywać całego projektu. TypeScript stanowi nadzbiór JavaScriptu. Zatem cały Twój projekt jest z nim w 100% kompatybilny, a Ty możesz stopniowo dodawać definicje typów. Nawet nie będziesz wiedział kiedy typy pojawią się w całej Twojej aplikacji. To daje Ci również możliwość uczenia się TypeScriptu w trakcie jego wdrażania. W tym kursie opanujesz podstawy a później... sam zobaczysz!
Ten kurs został stworzony z myślą o programistach, którzy podstawy JavaScriptu mają już za sobą i chcą poznać zalety statycznego typowania oferowanego przez TypeScript. Na początku Kursu zaczynamy również od krótkiej powtórki najważniejszych elementów samego JS.
3.8+
Wykorzystując klasy często istnieje
potrzeba, aby stworzyć klasę po której chcemy dziedziczyć, ale na podstawie jej
samej nie powinniśmy móc stworzyć nowych obiektów.
Taką właśnie mechanikę określamy mianem abstrakcji.
W tej chwili w naszym przykładzie mamy tutaj klasę Media, którą wykorzystujemy
bezpośrednio do tego, aby dziedziczyły z niej klasy movie oraz song.
Natomiast problem polega na tym, że tą klasę media również możemy zainstanciować.
Czyli tworzymy nowy obiekt na jej podstawie i tylko teoretycznie spełnia on
cechy, które są przez nas oczekiwane, bo zwróć uwagę że mamy tutaj np.
dostęp do odpowiednich właściwości, ale nadal jest to obiekt klasy media.
Aby czegoś takiego uniknąć i zasygnalizować, że klasa media nadaje tylko kształt klasom,
które po niej dziedziczą dodajemy przed nią słowo kluczowe abstract.
Dzięki temu klasa media staje się klasą
abstrakcyjną i nie możemy tworzyć na jej podstawie nowych obiektów.
Natomiast w tej chwili dalej nic nie stoi
na przeszkodzie, abyśmy wykorzystywali ją w pozostałych klasach.
Dodatkowo wewnątrz naszej klasy media
znajduje się metoda Play, która jest dostępna w klasach podrzędnych.
Natomiast możemy też stworzyć metody abstrakcyjne.
W takiej sytuacji możemy zdefiniować
wyłącznie ich kształt i poprzedzić słowem kluczowym abstract.
Dzięki temu w naszych klasach pojawiły się teraz błędy informujące nas o tym, że
nie implementujemy w pełni dziedziczonego kształtu klasy media. Dopiero w momencie
gdy utworzymy tę metodę oraz ją zdefiniujemy
otrzymujemy poprawną implementację klasy movie.
Także jak widzisz klasy abstrakcyjne to pewnego rodzaju klasy bazowe po których
można dziedziczyć, ale na podstawie ich samych nie można tworzyć nowych obiektów.
Ostatecznie abstrakcje są jedną
z możliwości, które służą do tego, aby określać kształt klas.
Alternatywą do nich są interfejsy, które omówimy sobie już w kolejnej lekcji.
W takim razie do usłyszenia za chwilę.