od Podstaw
9 godz. 20 min · JavaScript · Full-stack i Programowanie
Piotr PalarzWeb DeveloperJavaScript to język programowania, który napędza niemal wszystkie strony internetowe. Dopełnia on technologie HTML i CSS, za pomocą których tworzymy strukturę i wygląd dokumentu. Co jednak w sytuacji, gdy chcemy po kliknięciu w wybrany przycisk wyświetlić powiększone zdjęcie lub wczytać dodatkowe dane z serwera? To właśnie w takich sytuacjach przydaje się język JavaScript i tzw. DOM API, dostępne w przeglądarce. Jak się przekonasz, możliwości nowoczesnych przeglądarek w połączeniu z tym językiem są naprawdę ogromne.
Język JavaScript może być używany nie tylko na stronach internetowych. Z tego powodu, w kursie omówimy najpierw najważniejsze konstrukcje tego języka, które są niezależne od platformy uruchomieniowej. Dzięki temu zbudujesz fundamenty niezbędne do tego, by wykorzystać ten język np. w środowisku Node.js. Krok po kroku omówimy sposoby tworzenia zmiennych, dostępne typy danych i operatory. Następnie zobaczysz jak tworzyć tablice i obiekty, z jakich instrukcji warunkowych i pętli możesz korzystać, a także jak tworzyć własne funkcje. Przekazywana wiedza uwzględniać będzie nowości, które pojawiły się w języku wraz z rewolucyjnym standardem EcmaScript 6 (ES6).
Sam język JavaScript to nie wszystko, by tchnąć ducha w strony internetowe. Z tego powodu, przeglądarki internetowe udostępniają tzw. DOM API. To interfejs, który z użyciem języka JavaScript pozwala na manipulację treścią i wyglądem strony. W kursie bardzo dokładnie omówimy czym jest Obiektowy Model Dokumentu, a także jak z nim pracować. Zobaczysz jak tworzyć nowe elementy HTML i wstawiać je na stronę, jak modyfikować ich treść, atrybuty, style czy klasy CSS. Poznasz sposoby na odczytywanie położenia elementu na stronie i jego wymiarów, które będą niezbędne w wielu sytuacjach. Dowiesz się także, jak przypisywać obsługę zdarzeń w przeglądarce, by np. wywołać własną funkcję, gdy ktoś kliknie w wybrany przez Ciebie przycisk.
JSON to popularny format wymiany danych, a Ajax to potoczna nazwa dla asynchronicznych zapytań HTTP, które wysyłać możemy z poziomu kodu JavaScript. Dziś niemal każda strona internetowa wykorzystuje te technologie. W niektórych przypadkach jako dopełnienie podstawowej funkcjonalności witryny, a w innych jako główny motor napędzający stronę. Jeśli kiedykolwiek widziałeś, jak na stronie internetowej jakaś treść "doczytuje" się np. podczas przewijania - widziałeś w praktyce Ajax. W jednym z rozdziałów kursu zobaczysz, jak pracować z tym formatem, a także jak wysyłać wspomniane zapytania do serwera.
Choć kurs który masz przed sobą, jest kursem dla początkujących, to aby zrozumieć jak działa język JavaScript i jak z nim się współcześnie pracuje, omówimy dwa ważne tematy - zarządzanie zależnościami i bundlowanie kodu. Dowiesz się czym jest npm i jak z jego pomocą pobierać paczki gotowego kodu z internetu, a także jak sprawić, by bez trudnu dołączać je do własnego kodu. W tym celu skorzystamy z narzędzia snowpack, które pozwoli nam także na optymalizację kodu przed jego wypuszczeniem w świat. Na tym etapie omówimy również jak działają moduły ESM, pozwalające dzielić kod na mniejsze części.
Kurs podzielony został na możliwie krótkie lekcje, do których w każdej chwili możesz wrócić. Jeśli zatem zapomnisz jak odczytywać wymiary elementu na stronie, szybko odnajdziesz odpowiednią lekcję. Czym jednak była by sama teoria i proste przykłady, bez pokazania, jak połączyć je w całość i wykorzystać w praktyce? Dobra wiadomość jest taka, że w kursie stworzymy aż 5 praktycznych projektów, wykorzystujących zdobytą wcześniej wiedzę. Najpierw napiszemy program losujący Dużego Lotka, następnie dynamiczny pasek postępu przeczytania artykułu, dymek pojawiający się nad elementem po najechaniu na niego myszą, wygenerujemy tabelkę w użytkownikami na podstawie danych JSON, a na koniec tworzymy prosty odtwarzacz wideo, z możliwością pauzowania i przewijania filmu.
Kurs ten jest dla wszystkich osób, które znają już podstawy HTML i CSS i chciałyby przejść poziom wyżej i dodać do swoich stron dynamiczności. Żadna wcześniejsza wiedza z zakresu JavaScript nie jest wymagana, ale zalecana jest podstawowa wiedza z zakresu samego programowania (czym są zmienne, pętle, funkcje itd.). Materiał ten będzie również świetnym odświeżeniem i usystematyzowaniem wiedzy dla osób, które już z tym językiem miały do czynienia. Po przerobieniu tego kursu będziesz gotowy, by poznawać język JavaScript dalej i zacząć korzystać z nowoczesnych frameworków.
Teraz pokażę Ci, w jaki sposób możemy
sortować elementy tablicy. Więc jeżeli będziemy mieli tablicę, w której będą np.
liczby, będzie 10, 2, 5, 39, 1 i np. 100
i chcielibyśmy je posortować, aby tutaj były np.
od liczby najmniejszej do największej, to możemy zrobić to metodą sort.
Czyli wyświetlimy sobie tę tablicę, a następnie zrobimy arr.sort.
I to nam modyfikuje tablicę, na której wykonaliśmy właśnie takie sortowanie
i możemy jeszcze raz później zrobić sobie console.log arr.
Zobaczmy jak to się zmieni.
Zauważ, wygląda to w ten sposób. I nie
jest to sortowanie jakie nas by satysfakcjonowało.
Z jakiego powodu?
Otóż tablica jeżeli tylko skorzystamy z metody sort, to posortuje nam tak jakby
alfabetycznie, to wszystko traktując te elementy jakby to były wartości tekstowe.
Czyli zauważ mamy 1, 10, 100. Po prostu zostało to alfabetycznie posortowane.
Tutaj jest 2, 3 bo tutaj jest trójka i 5.
Natomiast jeżeli chcemy posortować według
jakiegoś naszego kryterium, to musimy tutaj przekazać taką funkcję anonimową i
funkcje będą w jednym z kolejnych rozdziałów,
ja zakładam, że ogólnie wiesz czym są
funkcje, dlatego chciałem tę lekcję zawrzeć w rozdziale o tablicach
zanim jeszcze przejdziemy do funkcji. Ale w
języku JavaScript funkcje możemy tworzyć na różne sposoby, które będę omawiał.
Jednym z nich jest pisanie po prostu funkcji z użyciem słowa function.
Tutaj będzie ona otrzymywać jakieś
parametry, zaraz je dodam, a tutaj będzie tzw.
ciało funkcji.
I teraz w przypadku sortowania tablic
algorytm jest taki, że będziemy otrzymywać dwa kolejne elementy, więc możemy sobie
jakby takie zmienne czy parametry nazwać jak chcemy np.
a i b.
I one tutaj zostaną przekazane.
To oznacza, że będziemy otrzymywać do tej funkcji pod a dostaniemy 10,
pod B dostaniemy dwójkę.
Coś zwrócimy i następnie kolejny, czyli ten drugi element zostanie
podstawiony pod a i kolejny pod b. I na podstawie tego co my
tutaj dostajemy będziemy mogli podjąć jakieś decyzje jak to chcemy posortować.
I teraz ta funkcja powinna zwracać
minus 1 jeżeli chcemy zamienić elementy kolejnością, czyli np.
dwójkę dać przed dziesiątkę,
a dwójka będzie pod b, dziesiątka pod a, 1 jeżeli chcemy je przestawić w drugą stronę
lub zwrócić 0 jeżeli chcemy, aby te elementy pozostały bez zmian.
Dlatego możemy w środku skorzystać z
instrukcji warunkowej w takiej funkcji i napisać tutaj
jeżeli a jest mniejsze od b, czyli korzystamy tutaj z operatora
porównania, o którym Ci już mówiłem wcześniej.
Jeżeli a jest mniejsze od b, to zwróćmy minus 1.
Czyli tak jak powiedziałem, jeżeli a jest
mniejsze od b, to chcemy je zamienić miejscami.
Następnie możemy zrobić kolejnego if, bo
wiemy, że return kończy nam działanie funkcji, więc tutaj nie trzeba robić bloku else,
zrobimy kolejnego if i napiszemy tutaj,
czyli jakby w przeciwnym wypadku jeżeli a jest większa
od b, to chcemy z tej funkcji zwrócić 1, natomiast w przeciwnym wypadku chcemy
zwrócić 0, czyli żeby te elementy nie były zamienione miejscami.
Zobaczmy jak teraz będzie wyglądała posortowane tablica.
No i teraz ona jest już posortowana
jak widzisz poprawnie.
Więc gdybyśmy chcieli zamienić kolejność
sortowania, czyli od największej liczby do najmniejszej
wystarczyłoby tutaj zamienić to na 1, a tutaj na minus 1.
Zobaczmy.
I teraz będzie posortowana w drugim kierunku.
Ale wróćmy do tego, co było.
Wiem, że na początku to się może wydawać
skomplikowane, ale później jak nabierzesz trochę doświadczenia to zobaczysz, że
sortowanie tablic będzie nam bardzo przydatne.
Nie tylko jak w nich będą liczby.
Tu będą mogły być różne obiekty, które
zostaną nam podstawione pod a i b i na podstawie innych kryteriów
tutaj będziemy musieli zwrócić -1, 1 i 0.
To będzie zależało od nas, więc mamy tutaj
pełną kontrolę nad tym, w jaki sposób chcemy posortować tablicę.
Tak naprawdę ten przykład może być
prostszy, bo ja wspomniałem, że trzeba zwrócić -1, 1 albo 0.
Tak naprawdę można zwrócić wartość ujemną
dowolną. Jak bym zwrócił minus 10 to byłoby to to samo.
Jak zwrócę + 10 to też byłoby to to samo.
Dlatego jeżeli mamy wartości liczbowe, to
w zasadzie to wszystko można by było wykomentować i zwrócić po prostu
poprzez return a minus b i efekt powinien być ten sam.
Zobaczmy. Czyli taki jak mieliśmy wcześniej.
Rzeczywiście tak jest, dlatego, że jeżeli pod a zostanie podstawione 10 pod b
zostanie podstawione 2 to 10 minus 2 to się równa 8, czyli zwracam wartość
dodatnią, a więc tak samo jak jakby zwrócił 1.
W przeciwnym wypadku będzie zwrócona wartość ujemna.
A jeżeli dwa elementy byłyby takie same
obok siebie to 2 minus 2 zwróciło by 0, czyli nie zamieniali byśmy ich miejscami.
A więc można to skrócić w przypadku liczb do takiego prostego zapisu.
Jak zatem widzisz domyślnie jeśli użyjemy
tylko arr.sort to będziemy mieli wszystko posortowane alfabetycznie
a jeżeli chcemy mieć jakiś wpływ na to jak to jest sortowane, to musimy przekazać
funkcję, do której będziemy otrzymywać dwa kolejne elementy tablicy i na ich
podstawie możemy je jakoś porównywać i zwracać wartości ujemne, dodatnie lub 0 w
zależności od tego jak chcemy sortować te elementy.