JavaScript od podstaw: konsola
Drugi, rozbudowany kurs JavaScriptu w konsoli przeglądarki: zmienne, operatory, napisy, warunki, pętle, funkcje, tablice i obiekty, a do tego lekcje praktyczne (tabliczka mnożenia, kalendarz, teksty) i refaktoryzacja, czyli ten sam program napisany lepiej. Każdy temat ma kilka przykładów i sporo zadań sprawdzanych automatycznie. Lekcje praktyczne kończą się na stronie WWW (kalendarz zbudowany z elementów DOM), co przygotowuje do JavaScriptu na stronach i do egzaminu INF.03.
Dla kogo: Liceum i technikum: rozbudowany kurs JavaScriptu w konsoli z praktyką i refaktoryzacją, pod INF.03. Więcej o kursie
Pierwszy program: console.log i komentarze
Pierwsze programy w JavaScripcie: wypisywanie tekstu i liczb w konsoli, kilka wartości w jednej linii, komentarze i czytanie komunikatów o błędach. Program uruchamiasz w całości albo krok po kroku.
- Witaj, świecie
- Tekst, liczba i działanie
- Kilka wartości w jednym console.log
- Pusta linia i ramka z tekstu
- Komentarze w kodzie
- Ten sam wynik na trzy sposoby
- Przedstaw się
- Wizytówka
- Ramka z gwiazdek
- Policz w console.log
- Podpisany wynik
- Pusta linia w środku
- Popraw wielką literę
- Włącz właściwe linie
- Choinka
- Działania z opisem
- Plan lekcji
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Zmienne, stałe i typy danych
Zmienne (let) i stałe (const) przechowują wartości pod nazwą. Poznasz typy danych: liczby, napisy, wartości logiczne, undefined i null, sprawdzisz typ operatorem typeof i zamienisz tekst na liczbę. Na koniec dwa sposoby zamiany wartości dwóch zmiennych.
- Zmienna let i zmiana wartości
- Stała const
- Typy danych i typeof
- Napis czy liczba
- Zamiana tekstu na liczbę
- Zamiana wartości: zmienna pomocnicza
- Zamiana wartości: przypisanie destrukturyzujące
- Dane ucznia
- Urodziny
- Jaki to typ
- Suma z napisów
- Liczby z jednostkami
- Zamień miejscami
- Licznik punktów
- Cena brutto
- Stała, która miała się zmieniać
- Sklejanie czy dodawanie
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Operatory i obiekt Math
Działania arytmetyczne, reszta z dzielenia, potęgi i kolejność działań, skrócone przypisania, porównania i operatory logiczne. Obiekt Math zaokrągla, liczy pierwiastki i losuje liczby, a toFixed ładnie formatuje kwoty.
- Działania i reszta z dzielenia
- Kolejność działań i nawiasy
- Skrócone przypisania i inkrementacja
- Porównania: === i ==
- Operatory logiczne
- Obiekt Math i toFixed
- Pole i obwód prostokąta
- Minuty i sekundy
- Cyfry liczby
- Średnia ocen
- Potęgi i pierwiastki
- Cztery zaokrąglenia
- Przeciwprostokątna
- Rok przestępny jako wyrażenie
- Odległość na osi liczbowej
- Rachunek w sklepie
- Skrócone przypisania
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Napisy i szablony
Praca z tekstem: długość napisu, pojedyncze znaki, wielkie i małe litery, wycinanie fragmentów, szukanie, zamiana, dzielenie na części i dopełnianie. Szablony w odwrotnych apostrofach z ${...} zastępują żmudne sklejanie plusami.
- Długość i pojedyncze znaki
- Sklejanie plusem
- To samo szablonem
- Wielkość liter i spacje
- Wycinanie i szukanie
- Zamiana, dzielenie i dopełnianie
- Inicjały
- Ile liter w imieniu
- Pierwsza i ostatnia litera
- Krzyk i szept
- Dwie części słowa
- Login i domena
- Kod pocztowy
- Pies zamiast kota
- Dane z jednej linii
- Nagłówek w ramce
- Numery z zerami
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Instrukcje warunkowe
Program podejmuje decyzje: if, else i else if, warunki złożone z && i ||, instrukcja switch oraz operator warunkowy ?:. Jeden przykład pokazuje refaktoryzację, czyli jak zagnieżdżone warunki zamienić na czytelny łańcuch else if.
- if i else
- Zagnieżdżone warunki
- Refaktoryzacja: łańcuch else if
- Warunki złożone
- switch
- Operator warunkowy ?:
- Parzysta czy nieparzysta
- Większa z dwóch
- Największa z trzech
- Ocena z punktów
- Czy rok jest przestępny
- Nazwa miesiąca
- Bilet do kina
- Pogoda słownie
- Trójkąt z odcinków
- Polska odmiana liczebnika
- Kod do sejfu
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Pętla for
Pętla for powtarza kod określoną liczbę razy: liczenie w górę i w dół, sumowanie, budowanie napisu w pętli, warunek w środku pętli oraz instrukcje break i continue. Jeden problem rozwiążesz dwoma sposobami i porównasz liczbę kroków.
- Liczenie od 1 do 5
- W dół i co kilka
- Suma w pętli
- Budowanie napisu w pętli
- Liczby parzyste: warunek w pętli
- Liczby parzyste: krok co 2
- break i continue
- Odliczanie do startu
- Parzyste w jednej linii
- Suma do n
- Silnia w pętli
- Potęgi dwójki
- Dzielniki liczby
- Podzielne przez 3 i przez 5
- Pierwszy kwadrat ponad 1000
- Bez wielokrotności trzech
- Pasek z gwiazdek
- FizzBuzz
- Średnia z liczb od a do b
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Pętle while i do...while
Pętla while powtarza kod, dopóki warunek jest prawdziwy, i sprawdza się tam, gdzie liczby obrotów nie znamy z góry: cyfry liczby, oszczędności, algorytm Euklidesa, zgadywanie metodą połówkową. Do tego do...while i porównanie for z while.
- while: dopóki warunek
- Rozbieranie liczby na cyfry
- Ile lat oszczędzania
- do...while wykona się co najmniej raz
- Silnia pętlą for
- Silnia pętlą while
- Liczba cyfr
- Suma cyfr
- Liczba od tyłu
- NWD przez odejmowanie
- NWD przez resztę
- Podwajanie do celu
- Lokata na 10 procent
- Problem Collatza
- Zamiana na system dwójkowy
- Zgadywanie metodą połówkową
- Czy liczba jest pierwsza
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Praktyka: tabliczka mnożenia i wzory
Lekcja praktyczna z pętlami zagnieżdżonymi: tabliczka mnożenia w wersji coraz porządniejszej (wyrównane kolumny, nagłówki), prostokąty, trójkąty, piramidy i szachownice z znaków. Te same wzory zbudujesz potem na stronie WWW.
- Tabliczka jednej liczby
- Tabliczka 1..5: pętla w pętli
- Tabliczka z wyrównanymi kolumnami
- Prostokąt i trójkąt
- Choinka ze wzoru
- Szachownica
- Tabliczka przez 9
- Kwadrat z krzyżyków
- Schodki
- Schodki w dół
- Piramida
- Pusta ramka
- Pełna szachownica
- Trójkąt z liczb
- Tabliczka 9 na 9
- Tabliczka z nagłówkiem
- Romb
- Kwadraty i sześciany
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Funkcje
Funkcja to nazwany fragment kodu, który można wywołać wiele razy z różnymi danymi. Parametry, return, wartości domyślne, trzy sposoby zapisu funkcji (deklaracja, wyrażenie, funkcja strzałkowa), zasięg zmiennych, funkcje wywołujące funkcje i pierwsza rekurencja.
- Deklaracja i wywołanie
- Parametry i return
- Wartości domyślne parametrów
- Trzy zapisy tej samej funkcji
- Zasięg zmiennych
- Funkcja w funkcji
- Rekurencja: silnia
- Powitanie z imieniem
- Większa z dwóch funkcją
- Funkcja zwracająca prawdę
- Silnia jako funkcja
- Stopnie Fahrenheita
- Linia z parametrami domyślnymi
- Potęga bez operatora
- Funkcja NWD
- Cena w złotych
- Suma cyfr rekurencyjnie
- Liczby doskonałe
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Refaktoryzacja: od powtórzeń do funkcji
Refaktoryzacja to poprawianie budowy kodu bez zmiany jego działania. Krok po kroku zamienisz skopiowane fragmenty na funkcje, magiczne liczby na nazwane stałe, długie warunki na funkcje z nazwą, a zagnieżdżone if na wczesny return. W zadaniach przepisujesz gotowy program i od razu go rozbudowujesz.
- Kopiuj-wklej: trzy średnie
- Krok 1: funkcja liczy średnią
- Krok 2: funkcja buduje cały wiersz
- Magiczne liczby
- Nazwane stałe zamiast magicznych liczb
- Zagnieżdżone if i wczesny return
- Powitania funkcją
- Ramki dla napisów
- Nowa stawka VAT
- Funkcja z nazwą zamiast warunku
- Trzy pętle w jedną funkcję
- Tabliczki z jednej funkcji
- Dni tygodnia z funkcji
- Tabela temperatur
- Wczesny return w kategorii wieku
- Rachunek z funkcji
- Wykres słupkowy z funkcji
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Tablice
Tablica przechowuje wiele wartości pod jedną nazwą: listę ocen, dni tygodnia, temperatury. Poznasz indeksy i długość, dodawanie i usuwanie elementów, dwa sposoby przechodzenia pętlą, liczenie sumy, średniej i maksimum, wyszukiwanie, tablice dwuwymiarowe oraz różnicę między kopią a drugą nazwą tej samej tablicy.
- Tablica, indeks i długość
- Dodawanie i usuwanie elementów
- Dwa sposoby przejścia pętlą
- Suma, średnia i maksimum
- Wyszukiwanie: gotowa metoda i własna pętla
- Tablica dwuwymiarowa: tabliczka mnożenia
- Kopia czy ta sama tablica?
- Pierwszy i ostatni miesiąc
- Lista zakupów
- Ponumerowana lista
- Średnia ocen z tablicy
- Najzimniejszy dzień
- Parzyste i nieparzyste
- Tablica od tyłu
- Pierwsza duża wpłata
- Punkty drużyn w turnieju
- Ile razy piątka
- Bez powtórzeń
- Przesunięcie w kółko
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Metody tablic: map, filter, reduce i sort
Te same zadania co w poprzednim temacie, tylko krócej: `map` przekształca każdy element, `filter` wybiera pasujące, `reduce` składa tablicę w jedną wartość, `sort` porządkuje. Każdą metodę zobaczysz obok zwykłej pętli, która robi to samo, a potem przerobisz pętlę na łańcuch metod. Poznasz też funkcje strzałkowe, `find`, `some`, `every` i pułapkę sortowania liczb.
- Pętla, która przekształca
- To samo przez map i funkcję strzałkową
- filter: wybierz pasujące
- reduce: z tablicy jedna wartość
- Refaktoryzacja: pętla z warunkami
- Refaktoryzacja: łańcuch metod
- sort i pułapka z liczbami
- find, findIndex, some i every
- Kwadraty przez map
- Krótkie słowa
- Suma koszyka przez reduce
- Ranking od najlepszego
- Pytania o wyniki
- Pętla w łańcuch
- Etykiety z indeksem
- Najdłuższe słowo
- Średnia bez skrajnych
- Dwa sposoby na zliczanie
- Tabliczka mnożenia z map
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Obiekty i JSON
Obiekt grupuje dane jednej rzeczy pod nazwami pól: imię, klasa i oceny ucznia zamiast trzech osobnych zmiennych. Poznasz odczyt pól kropką i nawiasami, tablice obiektów, obiekt jako licznik, metody z `this`, destrukturyzację i kopiowanie, a także JSON: tekstowy zapis danych, którym rozmawiają programy i serwery. W refaktoryzacji zamienisz kilka równoległych tablic na jedną tablicę obiektów.
- Obiekt i jego pola
- Równoległe tablice
- Refaktoryzacja: tablica obiektów
- Obiekt jako licznik
- Metody i this
- Destrukturyzacja i kopia obiektu
- JSON: dane jako tekst
- Wizytówka książki
- Pole wybrane zmienną
- Równoległe tablice na obiekty
- Najlepszy w klasie
- Licznik głosów
- Słowa w zdaniu
- Prostokąt z metodami
- Licznik kliknięć
- Destrukturyzacja w pętli
- Zapis i odczyt JSON
- Dane z serwera
- Plan lekcji jako obiekt
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Praktyka: kalendarz
Jeden problem, wiele podejść. Kalendarz miesiąca najpierw wypiszesz w konsoli zwykłymi pętlami, potem policzysz dzień tygodnia obiektem `Date` i zamkniesz wszystko w funkcji. Następnie oddzielisz dane (tablica tygodni) od wyświetlania: ten sam model zamienisz na tekst, na kod HTML, a na końcu przeniesiesz go na stronę, budując tabelę element po elemencie (`createElement`, `appendChild`, rodzic i dziecko) i dodając przyciski miesięcy oraz klikanie w dni.
- Dni miesiąca w pętli
- Kalendarz w konsoli: przesunięcie i nowa linia co 7
- Date liczy za nas i funkcja printMonth
- Model danych: tablica tygodni
- Ten sam model jako kod HTML
- Na stronie: innerHTML
- Drzewo DOM: createElement i appendChild
- Przyciski miesięcy, weekendy i klikanie w dni
- Ile dni ma miesiąc
- Miesiące roku i suma dni
- Jaki to dzień tygodnia
- Kalendarz lutego w konsoli
- Piątki trzynastego
- Ile dni do wakacji
- Tygodnie marca
- Wiersze tabeli HTML
- Lista dni na stronie
- Tabela grudnia z DOM
- Weekendy na czerwono
- Przyciski poprzedni i następny
- Kliknięty dzień
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Praktyka: teksty i szyfry
Napis to ciąg znaków, a każdy znak ma swój kod liczbowy. Na tym pomyśle zbudujesz szyfr Cezara: najpierw prostą pętlą w konsoli, potem po refaktoryzacji z funkcjami, a w innym podejściu z polskim alfabetem. Do tego odwracanie napisów na trzy sposoby, palindromy, zliczanie liter i łamanie szyfru. Na końcu ten sam model trafia na stronę: szyfrator z formularzem, który reaguje na kliknięcie i na każdy wpisany znak.
- Znaki i ich kody
- Odwracanie napisu na trzy sposoby
- Palindromy
- Szyfr Cezara: pierwsza wersja
- Refaktoryzacja: funkcje shiftChar i caesar
- Inne podejście: polski alfabet
- Łamanie szyfru: wszystkie przesunięcia
- Szyfrator na stronie: kliknięcie
- Szyfrator na żywo: zdarzenie input
- Statystyka tekstu
- Sprawdzanie palindromów
- Wielkie litery na początku słów
- Odszyfruj pracę domową
- ROT13 dwa razy
- Złam szyfr
- Szyfr Atbasz
- Szyfr przestawieniowy
- Alfabet Morse'a
- Najczęstsze litery
- Licznik znaków na żywo
- Szyfruj przyciskiem
- Szyfruj i odszyfruj
- Palindrom na żywo
- Walidacja przesunięcia
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Algorytmy z egzaminu różnymi sposobami
Algorytmy, które pojawiają się na egzaminach (NWD, liczby pierwsze, ciąg Fibonacciego, wyszukiwanie, systemy liczbowe), każdy w kilku wersjach: od najprostszej do najszybszej. Liczymy kroki algorytmu, żeby zobaczyć, ile daje lepszy pomysł. Na końcu sito Eratostenesa i kalkulator NWD trafiają na stronę: siatka liczb budowana z elementów DOM i lista kroków algorytmu.
- NWD: wersja z odejmowaniem
- NWD z resztą z dzielenia
- NWD rekurencyjnie i NWW
- Liczba pierwsza: naiwnie i do pierwiastka
- Sito Eratostenesa
- Fibonacci: rekurencja, pętla, pamięć
- Wyszukiwanie liniowe i binarne
- Systemy liczbowe: pętla i metody wbudowane
- Sito na stronie
- Kalkulator NWD z krokami
- NWD trzech liczb i NWW
- Skracanie ułamków
- Liczby pierwsze w przedziale
- Rozkład na czynniki pierwsze
- Suma cyfr na dwa sposoby
- Silnia: pętla i rekurencja
- Fibonacci pętlą
- Binarne wyszukiwanie z licznikiem
- Dwójkowy bez toString
- Liczby doskonałe do 1000
- Siatka liczb pierwszych
- Konwerter na żywo
- NWD z listą kroków
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Klasy i obiekty
Klasa to przepis na obiekty tego samego rodzaju: jakie mają pola i co potrafią (metody). Zobaczysz drogę od skopiowanych obiektów przez funkcję tworzącą obiekty do klasy, potem konstruktor, metody zmieniające stan, pola prywatne, gettery, składniki statyczne, dziedziczenie z `extends` i `super`, polimorfizm oraz kompozycję. Na końcu klasa staje się komponentem strony: jeden przepis, wiele niezależnych liczników i lista zadań z własnym modelem.
- Skopiowane obiekty
- Krok 1: funkcja tworząca obiekty
- Krok 2: klasa Student
- Metody zmieniają stan obiektu
- Pole prywatne, getter i składnik statyczny
- Dziedziczenie i polimorfizm
- Kompozycja: koszyk ma produkty
- Klasa jako komponent strony
- Lista zadań: model w klasie, widok z modelu
- Klasa Rectangle
- Z funkcji w klasę
- Licznik z limitem
- Punkt na płaszczyźnie
- Termometr z getterem i setterem
- Zwierzęta: dziedziczenie
- Pensje z super
- Numerowane bilety
- Biblioteka z książkami
- Liczniki z jednej klasy
- Licznik z przyciskiem minus
- Lista zakupów w klasie
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Wyjątki i walidacja
Programy dostają złe dane: pusty tekst zamiast liczby, ujemny wiek, uszkodzony JSON. Zobaczysz, jak błąd przerywa wykonanie i jak go złapać (`try`, `catch`, `finally`), jak samemu zgłosić błąd (`throw`), jak przejść od zwracania kodów błędów do wyjątków, jak napisać własną klasę błędu i jak walidować dane: przerwać na pierwszym błędzie albo zebrać wszystkie. Na końcu walidacja formularzy na stronie, po kliknięciu i na żywo przy wpisywaniu.
- Błąd przerywa program, try łapie błąd
- Krok 1: kody błędów zamiast wyjątków
- Krok 2: throw i opis błędu
- Wyjątek wędruje w górę wywołań
- finally wykonuje się zawsze
- Własna klasa błędu
- Pierwszy błąd czy wszystkie błędy
- Formularz z komunikatami przy polach
- Walidacja na żywo przy wpisywaniu
- Dzielenie z wyjątkiem
- Bezpieczny JSON
- Suma liczb z tekstu
- Sprawdzanie hasła
- Własny błąd ValidationError
- Zbierz wszystkie błędy
- Sprzątanie w finally
- Ponów próbę
- Formularz zapisu na zajęcia
- PIN sprawdzany na żywo
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3
Projekt: dziennik ocen krok po kroku
Projekt na zakończenie części konsolowej: program, który wczytuje oceny z tekstu i liczy średnie uczniów i przedmiotów. Pierwsza wersja to jeden blok kodu, a każdy następny krok to refaktoryzacja z zaznaczonymi zmianami: funkcje zamiast powtórzeń, dane jako tablica obiektów i metody tablic, walidacja z wyjątkami, klasa `Gradebook` jako model, osobny widok (raport, tabela) i na końcu ten sam model na stronie. W zadaniach projekt się rozrasta, a obok powstaje drugi mały projekt: magazyn.
- Dziennik krok 1: wszystko w jednym bloku
- Dziennik krok 2: funkcje zamiast powtórzeń
- Dziennik krok 3: tablica obiektów i metody tablic
- Dziennik krok 4: walidacja i wyjątki
- Dziennik krok 5: klasa Gradebook jako model
- Dziennik krok 6: nowy widok, ten sam model
- Dziennik krok 7: ten sam model na stronie
- Raport klas z jednej funkcji
- Uczniowie zagrożeni
- Oceny z plusami i minusami
- Wiersze z numerami błędów
- Przedmioty ucznia w klasie pochodnej
- Rozkład ocen gwiazdkami
- Mediana i dominanta
- Zapis dziennika do JSON i odczyt
- Tabela z wyrównanymi kolumnami
- Magazyn: od pętli do klasy
- Magazyn z cofaniem operacji
- Dziennik na stronie: średnie przedmiotów
- Dziennik na stronie: cofanie oceny
- Brudnopis 1
- Brudnopis 2
- Brudnopis 3