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.
Na koniec powiemy sobie jeszcze o funkcjach anonimowych.
Jest to rzecz, która nie jest dostępna we
wszystkich językach programowania ale w wielu jest.
W niektórych nazywa się to closure. I jest to coś co jest bardzo przydatne
szczególnie w języku JavaScript ale również np.
w języku PHP takie funkcje są dostępne. I my z tych funkcji co ciekawe już w tym kursie
skorzystaliśmy w przypadku sortowania tablicy.
Będę chciał Ci to teraz przypomnieć. Utworzymy sobie tablicę, którą nazwę arr,
chciałbym żeby ona tutaj miała kilka liczb 1, 55, 0 powiedzmy 15 i 33,
będziemy je chcieli posortować.
Być może pamiętasz, że na tablicach mamy takie metody,
czyli są to nic innego jak funkcje wewnątrz takiego obiektu jak np.
push.
I teraz do takiej funkcji jak ją wywołujemy to możemy podać pewne parametry.
W przypadku push mogliśmy dodawać coś do
tablicy ale mieliśmy też metodę sort gdzie mogliśmy przekazać inną funkcję.
Ja wtedy mówiłem, że jeżeli jeszcze nie
rozumiesz koncepcji funkcji to będziesz musiał później tam wrócić.
Teraz chce dokładniej wytłumaczyć co tutaj się dzieje.
Otóż skoro do funkcji możemy przekazywać
sobie dowolne parametry to możemy tam przekazać również inną funkcję.
Zaraz będziesz dokładnie wiedział jak to
działa ale przypomnę tylko, że my przekazaliśmy własną funkcję, która mogła
przyjąć a i b i tu ją definiujemy, mogliśmy to nazwać jak chcieliśmy
i teraz w przypadku sortowania tablicy jeżeli zwróciliśmy wartość ujemną to
znaczy, że dwa elementy tablicy czyli tak jakby jeden, który wpadnie tutaj 55 będzie
podstawione tu, że chcemy je zamienić kolejnością.
Więc w skrócie, wtedy tego nie pokazałem
ale w skrócie wystarczy, że z takiej funkcji zwrócimy
a - b i teraz jeżeli zrobimy console.log(arr) to ta tablica będzie już posortowana
od najmniejszej do największej liczby.
Natomiast co tutaj się stało.
Otóż my utworzyliśmy w tym miejscu funkcję
i tutaj w środku jest ciało i tą funkcję przekazaliśmy do arr.sort.
Nie wiemy jak pod spodem działa arr.sort
bo to już jest wbudowane w języku JavaScript,
ale to nasza funkcja właśnie tam się znalazła i my możemy w tej funkcji
zdecydować jak chcemy sortować te elementy.
Co ważne gdybyśmy tę funkcję wycięli i przypisali ją do jakiejś stałej np.
powiedzmy nazwalibyśmy ją sort
to moglibyśmy tutaj przekazać sort. Cały
czas o tym pamiętaj, że wszędzie tam gdzie możesz wstawić jakąś wartość możesz też
podać odwołanie do zmiennej czy stałej, która przechowuje tę wartość.
Tutaj nawet byśmy jeszcze mogli zrobić inaczej.
Moglibyśmy funkcję nazwać sort
i dokładnie tak samo ją przekazać.
Efekt byłby identyczny. Natomiast w tej lekcji mówimy o funkcjach anonimowych i
anonimowa jest wtedy kiedy właśnie ją podajemy w ten sposób, że nie przypisywaliśmy
jej żadnej nazwy itd tylko ją tutaj po prostu wstawiliśmy.
Teraz Ci pokaże drugi przykład, gdzie my wykorzystamy funkcję przekazaną przez
kogoś bo tutaj my przekazujemy funkcje do metody sort,
nie wiemy co się z tą funkcją dzieje pod spodem.
Wiemy tylko, że na jakimś etapie ona
otrzymuje pod parametry, które tutaj zadaliśmy poszczególne elementy tablicy. Natomiast
teraz będę chciał utworzyć swoją własną funkcję i pokazać Ci jak to może wyglądać.
Więc tworzymy sobie funkcję sayHello,
może zrobię tutaj trochę miejsca
i będę chciał żeby ta funkcja wyświetlała nam jakiś tekst.
Czyli chciałbym żeby ona przyjmowała
parametr tekst i żeby robiło console.log np.
albo może nawet nie console.log
tylko chciałbym żeby ta funkcja zwracała.
Na razie zrobimy tylko ten tekst.
Więc jeżeli teraz zrobimy sobie rezultat i
wysyłamy funkcję sayHello i podamy tutaj cześć,
no to to cześć można powiedzieć wpadnie pod ten parametr tekst i go zwrócimy.
Czyli ta funkcja tak naprawdę do res
zwróci nam cześć. I teraz zrobimy console.log(res), zobaczymy po prostu cześć.
Na razie to nie ma wiele sensu ale teraz pokażę Ci co możemy z tym zrobić.
Możemy powiedzieć, że nasza funkcja, którą
właśnie tworzymy przyjmuje jeszcze drugi parametr taki jak getName.
To jest nazwa cały czas dowolna.
Ty to nazywasz tak jak chcesz bo są to
tak jakby zmienne lokalne. I teraz chcemy tutaj przekazywać funkcje.
Bo gdybym po prostu tutaj przekazywał name np.
byśmy to nazwali name i tutaj byśmy dodawali ten tekst
czyli cześć przekazane, potem spację i do tego byśmy dokleili name
to w momencie wywołania naszej funkcji sayHello moglibyśmy powiedzieć cześć,
jako drugi parametr podać Piotr z wykrzyknikiem np.
i zauważ, że nasza funkcja zwróci wtedy cześć Piotr.
Tutaj moglibyśmy podać tak dokładnie i zwróci cześć Piotr.
Dlaczego?
Bo cześć pierwszy parametr wpadnie pod tekst Piotr wpadnie pod name,
no i ta funkcja zwróci tekst czyli cześć
połączy to ze spacją i połączy to z Piotr.
Ale skoro mówimy o funkcjach anonimowych
to pokażę Ci, że możemy to name zamienić na getName.
Oczywiście mogę tego nie zamieniać to
dowolna nazwa ale getName będzie nam sugerowało, że to pozwala jakoś pobrać imię
i będziemy chcieli tutaj wywołać sobie to getName.
Dziwnie wygląda, na razie jeszcze nie działa ale już Ci powiem jak to naprawić.
Możemy tutaj do tej funkcji sayHello
przekazać co chcemy jak przekaże dwójkę pod getName będzie dwójka więc jak
przekaże funkcję, którą właśnie tworzę w tym miejscu i zwrócę z tej funkcji Piotr,
to zobacz co tutaj się dzieje.
Cała ta funkcja anonimowa została
utworzona w tym miejscu i przekazana przy wywołaniu funkcji sayHello pod getName.
No bo pierwszy parametr to jest tekst,
przekazaliśmy część po przecinku przekazujemy drugi parametr czyli getName.
To oznacza, że wewnątrz tej funkcji pod
getName mamy dokładnie odwołanie do tej funkcji.
A skoro pod getName jest funkcja to funkcję można wywołać parą nawiasów okrągłych.
I teraz to co ta funkcja zwróci,
a więc return Piotr jest tutaj podstawione przy wywołaniu.
Ja wiem, że to się może wydać skomplikowane ale w bardzo wielu miejscach szczególnie w
JavaScript podajemy takie funkcje anonimowe dokładnie tak jak to zrobiliśmy tutaj.
Podaliśmy funkcję, która gdzieś pod spodem została wywołana nie wiemy jak,
natomiast tutaj wiemy, bo to my utworzyliśmy funkcję sayHello, która jako
drugi parametr przyjmuje funkcję, która ma zwrócić imię. To jest taki prosty przykład
natomiast tu by można było podać funkcję, która np.
zapyta o imię użytkownika i dopiero wtedy to zwróci.
Niemniej jednak ważne jest to, że funkcje można przekazać jako parametr tak samo jak
można przekazać tablicę, ciąg znaków czy np.
liczbę.
I jeśli ją tutaj przekażemy to pod getName jest dokładnie ta funkcja.
Zatem ją wywołujemy i to co ona zwraca jest tutaj podstawiane,
a więc Piotr jest łączone z tekst, które
przekazaliśmy no i dzięki temu zobaczymy tutaj cześć
Piotr.
Oczywiście tutaj można by było tą funkcję stąd wyciąć,
nazwać sobie gdziekolwiek funkcję,
tutaj można byłoby ją utworzyć, nazwać ją getName,
chociaż te nazwy nie mają nic wspólnego ze sobą to jest inny zakres,
można by ją było nazwać np.
zwróć
imię i tą funkcję można by było tutaj wtedy przekazać.
Tylko jej nie wywoływać bo jeśli byśmy ją
wywołali to byśmy podstawili w tym miejscu to co wpadnie pod getName, to co ta funkcja zwraca.
Więc to by było tak samo jak byśmy tutaj wpisali Piotr.
Natomiast jeśli przekażemy tylko do niej referencje tak,
to cały czas to będzie działać poprawnie bo utworzyłem funkcję, która zwraca Piotr
do funkcji sayHello
ją przekazałem a więc ona wpada pod getName i dopiero tu jest wywołana.
Wiem, że to może być skomplikowane ale
chciałem Ci pokazać, że tak funkcje przekazywać też można ale, że ta lekcja
skupia się na funkcjach anonimowych to chciałbym to zostawić w takiej formie.
A więc tworzę tutaj jakby w locie funkcję bez żadnej
nazwy, ona jest tylko jednorazowo potrzebna więc ją utworzyłem, wpadnie ona pod getName,
zostanie w odpowiednim momencie wywołana i dzięki temu będzie tutaj cześć Piotr,
a jeśli tutaj coś zmodyfikujemy również to zobaczymy na ekranie.