dla Początkujących
6 godz. 26 min · JavaScript · Full-stack i Programowanie
Adam GospodarczykProgramowanie to szeroka dziedzina, która nieustannie się rozwija. Rozpoczynając naukę możemy opierać się głównie na wskazówkach bardziej doświadczonych osób, bądź autorach kursów i nauczycielach. W praktyce najważniejsze na początku jest dobre zrozumienie tego, czym jest programowanie, jakie możliwości daje oraz jakie możemy wybrać ścieżki rozwoju. W tym kursie spojrzymy na programowanie z szerokiej perspektywy, dając Ci solidne podstawy do dalszej nauki.
To kolejne trudne pytanie, na które nie ma jednoznacznej odpowiedzi. Dobra wiadomość jest taka że języki programowania, podobnie jak angielski, niemiecki czy hiszpański mają cechy wspólne. Nie oznacza to że nauka jednego, da Ci dostęp do wszystkich ale poznasz ogólne mechanizmy, które spotkasz w niemal wszystkich pozostałych technologiach. W tym kursie skupiamy się właśnie na takich obszarach, opierając przykłady o obecnie najpopularniejszy język jakim jest JavaScript.
Być może zastanawiasz się jak dokładnie wygląda praca programisty? Czym różni się front-end od back-endu i czy wysokie umiejętności analityczne są wymagane niezależnie od obszaru programowania, którym się zajmujemy? Dodatkowo samo zostanie programistą to tylko początek drogi. Możliwości jakie przed nami stoją nie tylko są ogromne, ale również nieustannie się rozwijają, stawiając przed nami nowe wyzwania.
Ten kurs podzielony jest na dwie części - teoretyczną, która przedstawi Ci szerokie spojrzenie na programowanie oraz praktyczną, w której samodzielnie będziesz w stanie przekonać się jak pisać programy z wykorzystaniem języka JavaScript - najpopularniejszego języka na świecie. To, że będziemy przerabiać przykłady w JavaScript, nie stanowi przeszkody a wręcz lepiej przygotuje Cię do pracy z innymi językami jak Python, C# czy C++ lub Kotlin. To wszystko ułatwi Ci podejmowanie decyzji dotyczących dalszej nauki i rozwoju jako programista.
W pierwszych lekcjach części praktycznej kursu dowiesz się jak skonfigurować środowisko pracy wraz z edytorem, w którym przyjdzie Ci pracować. Pomożemy Ci w dobraniu odpowiednich ustawień i wtyczek, które przyspieszą naukę i pomogą w lepszym zrozumieniu podstawowych koncepcji programistycznych. Krok po kroku dowiesz się jak przygotować środowisko i rozpocząć komfortową pracę.
Mimo, że będziemy pracować z JavaScript, posłuży nam on do przedstawienia najważniejszych koncepcji programowania w każdym innym języku. Nie będziemy uczyć się tworzenia stron i środowiska przeglądarki a jedynie przećwiczymy najważniejsze koncepcje języków programowania w środowisku konsolowym. Dzięki temu zdobyte umiejętności z łatwością przełożysz na inne języki jak Python, Java czy Swift, bo wszystkie posiadają identyczne konstrukcje, a poznać należy wyłącznie różnice.
OOP to jeden z najważniejszych paradygmatów programowania, który powinien poznać każdy aspirujący Programista. Dzięki temu będziesz mógł zdecydowanie lepiej zrozumieć możliwości i powiązania klas i obiektów, które tworzą programiści a także pisać kod, który jest prostszy i reużywalny. To koncepcja, którą także wyjaśnimy obrazowo w kursie. Oczywiście, poza teorią w kursie pokażemy Ci przykłady tworzenia funkcjonalnych klas w JavaScript.
Kolejną ważną koncepcją, którą musi znać każdy początkujący Programista jest praca z błędami - innymi słowy obsługa błędów lub debugowanie naszej aplikacji. To niezwykle ważne, bo oszczędzi Ci mnóstwa frustracji oraz wielu godzin rozpoznawania, co w kodzie nie działa poprawnie. Z kursu w praktyce dowiesz się, jak testować swoje aplikacje, łatwo wykrywać błędy i korzystać z narzędzi, które będą je dla nas wykrywać lub automatycznie poprawiać!
Ten kurs przygotowaliśmy tak, aby był fundamentem wiedzy o Programowaniu, którego używamy w wielu naszych ścieżkach na eduweb.pl. To znaczy, że kurs który masz przed sobą rozpoczyna ścieżkę Python, JavaScript, Ruby i wiele innych. Wiemy, że w sieci jest mnóstwo materiałów na temat podstaw programowania i chcieliśmy przygotować wyjątkowy kurs, który da Ci spokój w natłoku wielu informacji w sieci. Zaangażowaliśmy w to najlepszych autorów eduweb oraz naszym zdaniem jednych z najlepszych programistów w Polsce. To, co jest jednak najważniejsze - kurs omawia programowanie bardzo prostym językiem, dzięki czemu jest przystępny dla każdego!
Kurs przeznaczony jest dla osób początkujących, które stawiają swoje pierwsze kroki na scieżce programisty lub programistki. Jednak skorzystają z niego także te osoby, które myślą o nauce programowania w celu uzupełnienia innych umiejętności, na przykład internetowi przedsiębiorcy, freelancerzy, UI/UX i web designerzy. Jeżeli czujesz się zagubiony lub przytłoczony dużą ilością często sprzecznych informacji - ten materiał pozwoli Ci szerzej spojrzeć na programowanie. To z kolei przełoży się na lepsze decyzje, które będziesz podejmować w kontekście swojego rozwoju. W kursie znajdziesz wskazówki i porady dotyczące efektywnej nauki programowania, które pomogą Ci szybciej zdobyć nowe umiejętności i pracę w zawodzie. Najważniejszą z nich jest fakt, że programowanie to dynamicznie rozwijająca się dziedzina, która wymaga od Ciebie nieustannej nauki. Zatem wypracowanie odpowiednich nawyków i technik nauki jest niezwykle istotne, niezależnie od miejsca w którym aktualnie się znajdujesz.
W tej lekcji pokażę Ci jak w praktyce
podzielić program na różne moduły i jak potem z nich korzystać.
I my tutaj cały czas operujemy w środowisku
Node.js bo za pomocą tego polecenia nodemon pod spodem uruchamiamy tak naprawdę Node. Czyli
środowisko Node pozwala nam wykonywać język JavaScript. I to środowisko ma swój
specyficzny system do modułów, które nazywa się CommonJS.
Natomiast w innych miejscach czy na innych
platformach uruchomieniowych, w tym również przeglądarkach internetowych
te moduły będzie się troszeczkę w inny sposób importować i eksportować
o czym będzie za moment.
No i w innych językach programowania też to wygląda trochę inaczej.
Natomiast chciałbym żebyć na tym etapie
nie skupiał się na tym jak konkretnie to się robi w danym środowisku ale na czym to
polega. Czyli czym jest eksportowanie i importowanie jakiś rzeczy.
To jest bardzo istotne a nie sam fakt jak zapisać to żeby coś zaimportować czy
wyeksportować. Więc będę chciał to zrobić na przykładzie, który już dobrze znamy.
Mam nadzieję, że go pamiętasz.
Czyli mieliśmy produkt i zamówienie i
mieliśmy taki oto przykład gdzie mogliśmy utworzyć nową klasę czy nowe obiekty
zamówienia, dodać produkty wyświetlić informacje, które są tutaj.
I teraz tutaj jest sporo tego kodu już w tym pliku chociaż oczywiście nie jest
niczym dziwnym kiedy mamy pliki gdzie są setki linijek kodu
aczkolwiek kiedy tylko można w jakiś logiczny sposób podzielić swój program na
moduły to należy to robić. I teraz chciałbym zrobić tak żeby można powiedzieć
wyciąć ten produkt z tego pliku, wyciąć również zamówienie a w naszym pliku
index.js tylko po prostu z tego skorzystać w taki sposób jak tutaj.
I możemy to bardzo łatwo zrobić jeżeli byśmy sobie teraz tutaj utworzyli w tym
katalogu nowy plik, który byśmy nazwali Product.js możesz go nazwać absolutnie
dowolnie ale dobrą praktyką jest nazwać go tak po prostu jak nazwa naszej klasy
żebyśmy wiedzieli co tam jest ale tak jak
mówię to jest tylko nazwa pliku, nazywasz jak chcesz.
I teraz co my będziemy chcieli zrobić.
Będziemy chcieli całą tą klasę Product wyciąć stąd, wstawić ją tutaj
i podobną rzecz będę chciał zrobić z zamówieniem. Czyli tutaj będę chciał
jeszcze raz utworzyć nowy plik, który nazwę Order.js wytnę sobie
całą klasę odpowiedzialną za zamówienie
mogę ją w edytorze w taki fajny sposób zwinąć jak długa, wyciąć, wszystko zostało wycięte
wklejone tutaj, zapisze ten plik, zapisze również ten plik.
No i teraz tutaj będziemy mieli problem jeżeli ten plik zapiszemy.
Zauważ, że program przestaje działać bo
próbujemy się odwołać do order, którego nie ma. Czyli w tej linijce już został zgłoszony
błąd bo nie mamy w tym pliku żadnej wiedzy na temat tego czym jest order i sam fakt,
że daliśmy to do innych plików tutaj w żaden magiczny sposób nie zacznie nam
działać. Żeby to wszystko posklejać ze sobą
należy z takiego pliku
jak mamy tutaj wyeksportować tę klasę. I co ważne w tym pliku mogłoby być sporo
różnych funkcji, z których ta klasa korzysta
poza nią, nawet mogłyby tutaj być jakieś stałe zmienne itd, do których wiemy, że wszystkie
te metody miałyby dostęp ale możemy uznać, że tylko jedną z rzeczy chcemy wyeksportować
z takiego pliku. Więc żeby to zrobić trzeba będzie na samym dole
najlepiej jest to zrobić tutaj, napisać module.exports
i przypisać tutaj order.
W ten oto sposób to zrobimy.
I to jest specyficzne właśnie dla CommonJS,
z którego Node korzysta w innych językach to może wyglądać inaczej czy
nawet w języku JavaScript ale na innych platformach. Tak jak wspomniałem nie jest
istotne jak dokładnie to robimy ale co się tutaj dzieje.
Jeżeli coś takiego zrobimy i zapiszemy to teraz w naszym głównym pliku na samej górze
będziemy mogli sobie to zaimportować. Bo tutaj wyeksportowaliśmy z tego pliku klasę Order,
tu ją będziemy mogli zaimportować. Więc jak ją importujemy to musimy ją przypisać również
do jakiejś stałej albo do zmiennej po to żebyśmy mieli oczywiście do niej dostęp.
Więc utworzę stałą, którą nazwę Order i zauważ, że jak ja ją utworze to wtedy pisząc tutaj
new Order już będziemy kierowali na to co ona przechowuje. I teraz trzeba tylko
zadbać o to żeby ona przechowywała dokładnie tą klasę, która tu została wyeksportowana.
A więc żeby to zaimportować korzystamy z takiej specjalnej funkcji, która w Node jest dostępna i
nazywa się require, a jej podajemy ścieżkę do pliku, który chcemy zaimportować
jako string czyli podajemy tutaj string ze ścieżką. I jeżeli coś jest w tym samym
katalogu tak jak tu mamy plik Index i w tym samym katalogu znajduje się Order
to wtedy piszemy kropka i stawiamy taki /
to oznacza, że odwołujemy się do tego samego katalogu i mój edytor jak widzisz
nawet już mi podpowiada, że tam znajduje się plik Order.
Nie musimy dodawać, że jest to rozszerzenie JS, Node automatycznie będzie wiedział o co
chodzi. I ta funkcja require można powiedzieć, że zaglądnie sobie
do tego pliku i to co ten plik eksportuje w
taki sposób to to nam zwróci i zapisze pod stałą, którą mogliśmy tutaj nazwać
oczywiście inaczej ale wtedy po innej nazwie musiałbym się do niej odwoływać.
Wyczyszczę to co mamy po stronie prawej zapisze
i zauważ, że teraz już nie ma błędu, że order is not defined
tylko, że Product is not defined.
Bo to samo musimy zrobić z produktem. Zrobimy na dole module.exports
i przypiszemy tutaj Product. Więc jakby ta nazwa nie ma nic wspólnego z tym co potem importujemy.
To jest odwołanie się do tej klasy. Więc jak tu się nazywa product,
tu po prostu przez referencje się do niej odwołujemy.
Przypisujemy, że to właśnie chcemy wyeksportować. Zapisze ten plik.
I tutaj mogę sobie skopiować taką linijkę i zamienić po prostu Product w ten sposób.
Jeszcze raz wyczyszczę żeby te błędy nam zniknęły, zapisuje i w magiczny sposób
wszystko działa poprawnie a my mamy tutaj zdecydowanie mniej kodu niż mieliśmy
wcześniej i podzieliliśmy nasz program na trzy pliki.
Co ważne z takich plików można by było eksportować więcej rzeczy ale to robi się
szczególnie w sytuacji gdybyśmy mieli jakiś plik gdzie mielibyśmy dużo funkcji
pomocniczych, które chcemy sobie gdzieś zaimportować i z nich korzystać.
Na razie natomiast nie musisz się tym zupełnie martwić. Chciałem Ci pokazać ogólną
koncepcję tego jak możemy korzystać z systemu modułów.
W przypadku Note jest to CommonJS,
który korzysta właśnie z takiej funkcji require.
Tak jak wspomniałem w innych platformach w
innych językach to będzie wyglądać inaczej,
ale idea jest dokładnie ta sama.
Dzielimy program na wiele plików i tam
gdzie potrzebujemy z czego skorzystać to to w pewien sposób importujemy
i po prostu z tego korzystamy. I bardzo często będziemy również korzystać z kodu,
który nie my napisaliśmy ale zrobił to ktoś inny i
jest to dokumentacja, która mówi, że jak
sobie zaimportujesz taki order to on ma dostępne takie i takie metody. Jak na
przykład addProducts, z której masz przekazać produkty itd.
I tak wygląda najczęściej praca programisty, że w dużej mierze korzystamy z
gotowych bibliotek czyli właśnie zbioru kodu, który napisał ktoś inny.