Nowy Standard JavaScript
10 godz. 43 min · JavaScript · Full-stack i Programowanie
Piotr PalarzWeb DeveloperNa początku dowiesz się jakie nowości pojawiły się w języku, jeśli chodzi o tworzenie zmiennych i stałych. Poznasz dwa nowe słowa let i const, a także dokładnie omówimy ich różnice, względem znanego nam do tej pory słowa var. Następnie poruszymy temat obiektów. Zobaczysz jak nowy zapis pozwoli znaczenie ułatwić nam pracę i sprawić, by kod był bardziej czytelny. W kolejnym rozdziale porozmawiamy o zmianach w funkcjach. Poznasz tzw. arrow functions wraz z poradami, kiedy z nich korzystać, a także z konsekwencjami ich użycia. Zobaczysz również, jak korzystać z domyślnych parametrów. Następną nowością będą operatory rest i spread, które znacząco uproszczą pisanie kodu dla funkcji i tablic. Chwilę później rzucimy okiem na bardzo ciekawy temat, mianowicie na tzw. destructuring. To nowa funkcja języka, która pozwala w łatwy sposób wyciągnąć odpowiednie dane z tablic i obiektów, nawet jeżeli te posiadają kilkupoziomową, zagnieżdżoną strukturę. Zmian doczekały się również ciągi znaków. Poznasz nowy zapis, tzw. template string, a także możliwość wykorzystania funkcji tagujących.
ES6 wprowadza do języka JavaScript zapis klas. I choć na początku wydaje się, że to duży krok w stronę klasycznych obiektowych języków programowania, to jak się przekonasz, jest to w dużej mierze tzw. syntactic sugar, a więc zupełnie nowy, prostszy zapis, a prawie identyczne jak wcześniej działanie, oparte na dziedziczeniu prototypowym. W kursie poruszymy również temat Symboli oraz tego jak z nimi pracować, a chwilę później poznasz iteratory. To konstrukcje ułatwiające iterację, które znacząco upraszczają pracę z kolekcjami danych. Wraz z iteratorami poznasz również generatory, które ułatwiają z kolei tworzenie tych iteratorów. Istotną nowością w ES6 są również natywne Promise. To sposób na rozwiązanie problemu asynchroniczności, który znamy od bardzo dawna w postaci różnych bibliotek. Od teraz jednak Promisy znajdują się bezpośrednio w języku. Nowymi konstrukcjami, które pozwalają pracować z kolekcjami danych, są Map i Set. Dowiesz się jak z nich korzystać, a także do czego są przydatne. W jednym z rozdziałów rzucimy też okiem na tzw. Proxy API. To mechanizm języka, który pozwala na dość niskopoziomowy dostęp do różnych operacji. I choć być może nie jest to coś, z czego będziesz korzystał nad wyraz często, to warto wiedzieć, jakie są nowe możliwości tego API.
Jedną z najlepszych nowości, która zawitała do języka JavaScript wraz z ES6 są moduły. To możliwość dzielenia kodu na wiele plików, z których można pewne wartości wyeksportować, a następnie zaimportować je w innych modułach. Tutaj dowiesz się wszystkiego, co z modułami związane. Zobaczysz wiele sposobów na eksport i import, a także jak pracować z modułami w przeglądarkach internetowych. Kurs skupia się na omówieniu wszystkich najważniejszych nowości w ES6, dzieląc je na rozdziały. Jeden z nich natomiast, poświęcony został omówieniu mniejszych zmian, które znalazły się w specyfikacji. Poznasz w nim np. nowe metody tablic czy ulepszoną współpracę z Unicode.
Specyfikacja EcmaScript 2015 wprowadziła naprawdę bardzo wiele zmian, ale jej twórcy założyli, że od tego czasu każda kolejna wersja specyfikacji będzie pojawiać się co roku. Oznacza to przede wszystkim, że nie będziemy na raz bombardowani aż tak wieloma zmianami, jak w 2015 roku. W tym kursie nie zabrakło zatem omówienia nowości ze specyfikacji ES2016 oraz 2017, gdzie poznasz np. nowe metody dla stringów czy funkcje asynchroniczne.
Kiedy będziesz już uzbrojony w solidną wiedzę z zakresu nowości w ES6, dowiesz się jak w praktyce pracuje się dzisiaj z tym standardem. W jednym z rozdziałów omówimy nowoczesny workflow z użyciem npm i wykorzystamy popularne narzędzie webpack, do pracy z modułami, a także do transpilowania kodu ES6 do wersji ES5. Dzięki temu nowoczesny kod, który napiszemy, będzie mógł być uruchamiany również w starszych przeglądarkach, które nie wspierają najnowszego standardu. Dowiesz się na co zwrócić uwagę, by wszystko działało bez zarzutu.
Zwieńczeniem tego kursu będzie praktyczny projekt, w którym od podstaw wykonamy swoją własną bibliotekę do pracy z Obiektowym Modelem Dokumentu. Będzie ona w działaniu nieco podobna do znanej chyba wszystkim biblioteki jQuery. Na tym przykładzie postaramy się wykorzystać jak najwięcej wiedzy z zakresu ES6 zdobytej wcześniej. Stworzymy metody do pracy z drzewem dokumentu, a więc do wyszukiwania elementów, do tworzenia nowych, do przypisywania im klas, atrybutów czy styli CSS. Nie zabraknie również modułu odpowiedzialnego za współpracę z Ajax. Cały kod utworzymy oczywiście w sposób modułowy, aby bibliotekę można było łatwo rozwijać w przyszłości. Na koniec projekt ten przetranspilujemy do kodu ES5 z użyciem Babel i przetestujemy w starszej przeglądarce Internet Explorer 11, aby upewnić się, że nasza biblioteka działa poprawnie.
Kurs ten jest dla wszystkich osób, które znają już język JavaScript i czują się w pracy z nim swobodnie. Jeśli zatem chciałbyś pracować z nowoczesnym kodem JavaScript, to ten kurs jest zdecydowanie dla Ciebie. A może masz zamiar poznać framework Angular lub bibliotekę React? Tam również wykorzystywany jest najnowszy zapis ES6, więc wiedza ta będzie naprawdę pomocna. Z solidną wiedzą z zakresu EcmaScript 6, bez trudu pozostaniesz na bieżąco z każdą kolejną edycją tej specyfikacji.
Temat destructuring'u czy inaczej mówiąc dekompozycji, zakończymy sobie
jeszcze jednym przykładem, w którym pokażę ci, że można tego używać również na parametrach
funkcji. To jest coś co dla deweloperów, którzy nie korzystali jeszcze ES6, też
na początku wygląda dziwnie, ale jest niesłychanie przydatne, dlatego na początek pokażę
ci, że mam taki kod i nazwałem metodę setSliderSpeed. Tutaj oczywiście
jest to taka metoda, która nic nie będzie robić, ale zakładamy, że może tworzymy jakieś rozwiązanie
jakiś slider i chcemy móc mu przekazać jakieś opcje. No
i generalnie będziemy mieli pod zmienną config za moment jakieś opcje i
zobacz, że one wpadną tutaj pod options i powiedzmy, że mam jakiś slider
i chciałbym dodać do jego właściwości speed oraz easing na takie same jak były tutaj
w options przekazanym i następnie go wyświetlić Dlatego utworze sobie
taki oto config za pomocą const, aby nie można było go później już nadpisać, pamiętaj
jednak, że te wartości, które są wewnątrz można, const tego nie zmienia,
czyli można je normalnie zmienić po config kropka na przykład autoplay i powiedzmy,
że teraz chciałbym wywołać sobie metodę setSliderSpeed i przekazać config.
No, czyli generalnie tutaj myślę, że wiesz jak to działa. On wpadnie pod options. No
i z niego wyciągniemy sobie speed orazeasing i przypiszemy do tego slider'a, który będziemy
mogli podejrzeć. Po odświeżeniu widzimy taki oto obiekt, będzie to
ten nasz slider, który ma speed i easing. Co jednak, jeżeli nie chcemy tutaj odwoływać
się do tych poszczególnych kluczy, można powiedzieć, czy właściwości tego obiektu,
bo wiemy, że nasza metoda setSliderSpeed zawsze będzie przyjmowała tylko
dwa parametry. Chciałbym, żeby to było speed oraz easing. I
teraz, żeby to zadziałało to z kolei tutaj przy wywoływaniu musiałbym podać speed
oraz config. No i wydawałoby
się, że nie jest to żaden problem, bo faktycznie nie jest i powinno nam to zadziałać. Tutaj
oczywiście musielibyśmy się tego pozbyć No i nie ma błędu, działa
to dokładnie tak samo, ale ciekawa rzecz jest taka, że możemy sobie tutaj
zrobić destructuring na parametrach, czyli gdybym bym napisał coś takiego, nie
to nic czego nic czego byś jeszcze nie znał, czyli po prostu destructuring obiektu,
tak jak widziałeś kilka lekcji temu, to to co zostanie przekazane tutaj
przy wywoływaniu tej funkcji, czyli config, będzie potraktowane jako ten obiekt,
który normalnie i pokaże ci to wyżej albo może niżej. Gdybyśmy
mieli let i tutaj config, no to dokładnie pod speed i
easing, mielibyśmy wyciągnięte z tego config'a speed i easing, i dokładnie
to samo stanie się tutaj, tylko że tutaj nie robimy już równa się, bo jeżeli zrobię równa
się, to po prostu przypisuje wartość domyślną dla całego tego parametru, więc
zrobimy to za moment, ale tak by to wyglądało. Czyli w tym momencie
tutaj przekazuje config i pod parametrami speed oraz easing znajdzie
się tylko to, co z tego config'a zostanie z nich wyciągnięte. No i teraz
powinno to zadziałać tak samo. Zobaczmy, natomiast gdybyś chciał zmienić nazwę
z tych któregoś z tych parametrów, na przykład sliderSpeed,
to mógłbyś tutaj napisać speed i slider, czyli
dokładnie to, co wszystko widziałeś już wcześniej w przypadku
destructuring'u obiektu Widzisz, że działa to dokładnie tak samo. Ja jednak
zostawię to przy takiej wartości speed. Co jednak by było, gdyby ktoś
jest wywołujący tę funkcję nie podał tutaj nic. Okaże się, że mamy
błąd. Ten sam błąd, który pojawiał się w przypadku destructuring'u go obiektu. Dlatego,
jeżeli robisz destructuring parametrów funkcji. Warto tutaj skorzystać z
domyślnego parametru jakim jest pusty obiekt i wtedy te zmienne
przyjmą wartość undefined, ale przynajmniej nie będzie błędu, czyli pamiętaj, że tutaj
nie robimy destructuring'u z tego obiektu, tylko z tego, który zostanie
przekazany tutaj, ale gdyby nie został przekazany, to ten w tym miejscu jest
domyślnym parametrem dla właśnie całego tego obiektu config,
który miał być tutaj przekazany, bo normalnie gdybyśmy to wyciągnęli i robili
takidestructuring, no to robimy destructuring z tego obiektu. W przypadku funkcji
no różnica jest właśnie taka, że to będzie domyślnym parametrem dla config'a,
który powinien tutaj być przekazany. Dowiedziałeś się zatem
sporo na temat destructuring'u i mam nadzieję, że jest to coś z czego będziesz chętnie korzystał.
Zarówno na tablicach jak i na obiektach, ale jak widzisz również na
parametrach funkcji.