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 stworzymy swoją pierwszą klasę, która pozwoli nam opisać produkt.
Czyli klasa pozwala nam opisać jakąś rzecz z rzeczywistości a więc jeżeli będziemy
chcieli mieć zamówienia i produkty na czym się skupimy jeszcze w kolejnej lekcji, to
chciałbym najpierw w jakiś sposób opisać produkt. W języku JavaScript ale także w
wielu innych językach bardzo podobnie to wygląda,
klasy tworzymy pisząc słowo kluczowe class i następnie podając nazwę takiej klasy i
tutaj te nazwy to Ty je ustala tak samo jak przy nazwach funkcji czy zmiennych. A więc
tutaj są dokładnie te same reguły, nie możesz klasy nazwać np.
zaczynając od cyfr itd.
Ja będę chciał naszą klasę nazwać Product więc napiszę to tak
i zauważ, że użyłem na początku wielkiej litery.
Nie jest to wymagane, spokojnie możemy tak napisać ale jest to taka przyjęta
konwencja, że klasy nazywamy z wielkich liter.
Jeżeli tutaj byśmy jeszcze chcieli mieć jakąś kolejną rzecz kolejne słowo np.
ProductOrder coś takiego to musielibyśmy skorzystać z notacji camelCase.
W zasadzie nie musimy ale jest to dobra
praktyka i tak się przyjęło, że klasy nazywamy z wielkich liter.
Następnie za pomocą takich nawiasów
otwieramy jakby ciało tej klasy. Czyli słowo class i następnie tutaj produkt.
Tak to nazwaliśmy. I teraz wewnątrz klasy możemy mieć metody czyli tak naprawdę są
to funkcje, ale nie piszemy tak jak do tej pory np.
function
i tutaj jej nazwa tylko od razu podajemy jej nazwę.
Tak jest w języku JavaScript.
W innych językach np.
w PHP piszemy fanction i podajemy nazwę. Więc to będzie zależne od języka ale ty
nie powinieneś się teraz na tym skupiać bo nie jest to istotne.
Ważne żeby zrozumieć jak mniej więcej kasy wyglądają
i przede wszystkim do czego służą. Więc w
języku JavaScript tutaj od razu piszemy nazwę funkcji.
I na początek będę chciał skorzystać z takiej specjalnej funkcji, która się nazywa
constructor. To jest specjalna nazwa ja jej nie wymyśliłem.
Ona ma tutaj specjalne znaczenie w języku JavaScript.
W innych językach jest to np.
funkcja construct,
tak jak w PHP więc działanie jest to samo
ale troszeczkę inny zapis. I teraz chciałbym kiedy będziemy za moment
tworzyć produkt żeby można było przypisać temu produktowi nazwę oraz cene.
Więc nazwę sobie parametry do tej funkcji jako name i price.
Pamiętaj, że cały czas jest to funkcja. Tak samo jak do tej pory tworzyliśmy funkcje,
gdybyśmy napisali function constructor to może dla Ciebie wygląda bardziej znajomo
to mówimy, że ta funkcja ma przyjmować dwa parametry.
Natomiast w klasie nie piszemy tego słowa
function tylko od razu nazwę tej funkcji. I teraz sobie otworzymy takie oto nawiasy,
no i będziemy mieli dostęp do name i price.
Ale kiedy to się tutaj pojawi, w jaki sposób to wywołać.
Chciałbym zrobić console.log(name) i console.log(price) i teraz pokazać Ci co
się stanie jak zapiszę. Nic się nie stało. Dlatego, że my dopiero zdefiniowaliśmy klasę,
czyli jakby taki szablon, z którego będziemy tworzyć produkty. I teraz będę
chciał sobie utworzyć produkt więc tworzę normalnie stałą lub zmienną, to nie ma
większego znaczenia, którą mogę również nazwać jak chce, nazwiemy to produkt albo
może w naszym przypadku nazwijmy to book jak książka i następnie chcemy z tego
szablonu jakim jest klasa utworzyć nowy obiekt, który będzie nam reprezentował książkę.
Robi się to z użyciem słowa kluczowego new i następnie podajemy nazwę tej naszej
klasy. W ten oto sposób czyli new Product. To nam utworzy obiekt,
ale co ciekawe rzeczy, które przekażemy
tutaj wpadną automatycznie do tej funkcji constructor i ta funkcja się wykona.
Czyli my nigdzie nie musimy pisać tak jak robiliśmy to wcześniej np.
constructor
coś takiego i tej funkcji wywoływać. Nie trzeba tego robić.
Jak zrobimy new Product i tu przekażemy pierwszy parametr to on wpadnie tu pod name, drugi pod price.
Więc napiszmy sobie, że nazwa naszej książki to jest Władca Pierścieni
i po przecinku podajemy tak jak zawsze do funkcji kolejny parametr i to jest cena,
powiedzmy, że będzie to 49,99.
Jak zapisze, zauważ, że teraz nam się to w konsoli pojawiło. Dlatego, że właśnie new
Product wywołało na tej klasie funkcję czy w zasadzie tutaj metodę constructor,
przekazało te parametry no a ta metoda co robi? No robi console.log
dlatego one się tutaj pojawiły.
Będziemy chcieli natomiast zrobić inną
rzecz a mianowicie to name i price, które zostały przekazane nie wyświetlać w
konsoli ale przypisać jakby wewnątrz tego obiektu. Robi się to za pomocą słowa this i
słowo this odwołuje się jakby do całego tego nowo tworzonego obiektu. Czyli jak
tutaj stworzyliśmy obiekt, który tutaj sobie nazywamy book,
czy w takiej stałej go przechowujemy,
jest tworzony nowy obiekt i wtedy wewnątrz tej klasy this kieruje na ten obiekt. I
możemy sobie dowolne rzeczy przypisać do tego obiektu. Więc chciałbym tutaj napisać
this.name równa się name, zaraz to wytłumaczę i this.price równa się price.
Teraz jeżeli zapisze nic się nam nie
wyświetla nowego ale wewnątrz tego obiektu przypisaliśmy sobie name i price.
I teraz te nazwy na początku mogą być mylące bo ty myślisz, że skoro tutaj jest
name to musi się to nazywać tak samo. Nie. Nazwaliśmy parametr name, mogliśmy go nazwać
dowolnie i teraz jak przypisuje coś wewnątrz obiektu też mogę sobie to nazwać
dowolnie. Tu mógłbym napisać this.nazwa równa się to co ktoś przekazał
name. Wtedy wewnątrz tego obiektu pod nazwa miałbym Władca Pierścieni.
Natomiast zazwyczaj nazywa się to po prostu tak samo więc wewnątrz
tego obiektu będę chciał mieć name, które będzie miało taką samą wartość. Znowu gdybym
tutaj powiedział, że jest to nazwa produktu no to musiałbym tutaj podać nazwę.
Mam nadzieję, że to rozumiesz, że po prostu
to name i name oraz te price nie ma nic wspólnego, że to są takie same
nazwy. Po prostu nazwałem parametr price ale również wewnątrz tego obiektu pod this.price
chcę przechowywać przekazaną tutaj wartość.
Być może pamiętasz jak w tym kursie już
mówiliśmy o obiektach, które tworzyliśmy w taki prosty sposób i tam np.
mieliśmy firstName
równa się Jan. To teraz taki utworzony z klasy obiekt jest troszeczkę podobny.
Dlatego, że możemy się odwoływać do jego właściwości i metod.
I to co pisaliśmy pod this
czyli this.name i this.price są to właściwości tego obiektu. Dlatego jak teraz utworzyłem
ten obiekt z użyciem new Product, przekazałem mu te rzeczy,
constructor się wykonał, przypisał do tego
obiektu name oraz price na te, które przekazałem to mogę zrobić console.log(book),
to mi zwróciło cały ten obiekt i odwołać się do name.
Zobacz, że to wyświetli Władca Pierścieni,
a jak się odwołam do price
to wyświetli mi cenę.
I właśnie to name i price, które teraz tutaj
wpisałem wynika z tego, jeżeli tutaj bym to nazwał nazwa,
to w tym miejscu musiałbym powiedzieć book.nazwa.
Czyli to są po prostu właściwości obiektu.
Ok, skoro mamy właściwości to pokażę Ci
jeszcze, że w klasie można definiować metody a metody są to po prostu funkcje.
I skoro Ci powiedziałem, że tutaj nie piszemy słowa function tylko od razu nazwę
funkcji to teraz pod spodem stworzymy sobie jakąś metodę.
Będzie to tak naprawdę funkcja, z której będzie można skorzystać.
Pamiętaj, że ta constructor ma specjalne znaczenie bo nigdzie jej nie wywoływałem
ale przy robieniu new, to co przekażę wpada do constructor.
Natomiast wszelkie pozostałe mogę już
sobie nazywać tak jak chcę więc chciałbym stworzyć taką metodę, którą nazwę getName
a więc zwróć imię i ona się odwoła,
zobacz return this.name.
Dlaczego ta metoda będzie miała dostęp do name?
No właśnie z tego powodu, że w constructor przypisałem to do tego obiektu poprzez this.
Gdybym tego nie zrobił to w metodzie getName nie miałbym do tego dostępu.
I teraz owszem skoro możemy tutaj zrobić tak
jak Ci pokazałem book i odwołać się bezpośrednio do name,
to możesz zapytać po co mi metoda, która robi dokładnie to samo.
To wynika z tego, że w wielu językach programowania możemy mieć tzw.
prywatne właściwości i wtedy nie dałoby się do nich tak odwołać,
ale również jest dobrą praktyką tworzenie
metod, które nam zwracają te rzeczy, które są dla nas potrzebne.
Teraz co to oznacza, że stworzyłem na tej klasie metodę getName.
To oznacza, że zwrócone tutaj poprzez new
Product obiekt, który mamy pod book, ma dostęp do takiej metody.
Dlatego jeżeli powiem book.getName i wywołam tę
metodę bo pamiętaj, że jest to funkcja zwróci mi to Władca Pierścieni.
Podobnie mógłbym sobie teraz zrobić metodę getPrice
i powiedzieć return this.price. Tu mogłaby być np.
logika, która by tą cenę jakoś formatowała itd.
Więc to jest plus tego, że jest to osobna funkcja.
Więc jeżeli teraz tutaj powiem this getPrice to mi zwróci 49,99.
Jest to prosty przykład, mam nadzieję, że nie zbyt zagmatwany.
W razie czego jeszcze raz sobie obejrzyj tę lekcję i upewnij się, że wszystko tutaj
dobrze rozumiesz. Starałem się to dokładnie wytłumaczyć bo w kolejnej lekcji stworzymy
już dużo bardziej rozbudowany przykład, który pokaże Ci jak za pomocą tego
programowania obiektownego możemy opisać zamówienie, które będzie przyjmowało wiele
produktów, będziemy mogli zobaczyć podsumowanie tego zamówienia itd.