Professional Documents
Culture Documents
Nżynieria Nternetu: Ykłady Nformatyka Echniczna
Nżynieria Nternetu: Ykłady Nformatyka Echniczna
JAVASCRIPT I TYPESCRIPT
• W 1995 Brendan Eich z Netscape Communications tworzy LiveScript – dynamiczny język dla przeglądarek www. Nowość
nie przyjęła się za dobrze – zainteresowanie programistów było nikłe.
• Koniec 1995 – Z pobudek czysto marketingowych, przemianowano LiveScript na JavaScript (za zgodą i licencją Sun)
• Wiele implementacji (1996 - 2006 Microsoft rozwijał swój JScript)
• 1997 - Netscape Communications wraz z ECMA tworzy standard nowego języka – ECMAScript pod patronatem ECMA
(European Computer Manufacturers Association) .
• Stabilny rozwój ES1-3 (do 1999r), problemy z ES4 (rozwój wstrzymany na blisko 10 lat), drobne zmiany ES5 (2011r).
Współczesny JS == ES6 (2015)
JAVASCRIPT W 2023
• To co nazywamy dziś JavaScript to implementacja języka ECMAScript (w skrócie ES)
• Standard jest cały czas uaktualniany. Od roku 2015 (ES6 == ES2015), powstaje nowa
wersja, którą zajmuje się komisja TC39 (Technical Committee)
• Każdy nowy element języka przechodzi 5 poziomów:
• 🤷🏻 Stage 0: Strawperson - pomysły
• 💡 Stage 1: Proposal – Formalny opis pomysłu, API, przykłady, dyskusja
• ✍🏻 Stage 2: Draft – Wstępny szkic specyfikacji, składni, wstępna implementacja i testy
• 📝 Stage 3: Candidate – Ostatnie szlify, recenzje, gotowa implementacja, nie powinno być żadnych
otwartych tematów
• ✅ Stage 4: Finished – propozycja trafia do specyfikacji standardu
• Przykład: https://github.com/tc39/proposal-pipeline-operator
• Obecna wersja standardu: ES2023 (lub ES14) (czerwiec 2023) -
https://tc39.es/ecma262/2023/
• String - napis
• Symbol – unikalna wartość (stosowana np. jako klucz w obiektach)
• Prymitywy są niezmienne (immutable)
• Wszystko co nie jest prymitywem dziedziczy po obiekcie:
• Tablice
• Funkcje
• Instancje klas
• Obiekty
SPRAWDZENIE TYPU - TYPEOF
• Typ prymitywu można sprawdzić podczas działania skryptu (runtime)
za pomocą operatora typeof zwracającego typ jako string
JS PODSTAWY – VAR
• var to przestarzały sposób deklaracji zmiennych
• Odradza się używać deklaracji zmiennych z wykorzystaniem var
Zasięg Funkcji: Hoisting
Ponowna deklaracja:
Wartość
zwracana (lub jej
brak)
JS PODSTAWY – ARROW FUNCTIONS
FUNKCJE JAKO OBIEKTY PIERWSZEJ KLASY
W językach programowania, w których funkcje są traktowane jako
"obiekty pierwszej klasy" (first-class citizens), funkcje mogą być:
Przekazywane jako argumenty do innych funkcji:
Przypisywane do zmiennych:
FUNKCJE ANONIMOWE I WYŻSZEGO RZĘDU
• Funkcje anonimowe najczęściej stosujemy jako argumenty innych
funkcji (tzw. callback)
JS PODSTAWY – FUNKCJE
CLOSURES (DOMKNIĘCIA)
Funkcje strzałkowe ma
dostęp w klasie do jej
Gettery i settery składników
Do tworzenia instancji
klas używamy new
OBIEKTOWOŚĆ
KOPIOWANIE OBIEKTÓW
KOPIOWANIE GŁĘBOKIE
• Object.assign: Używana do kopiowania wartości wszystkich wyliczalnych własnych właściwości z
jednego lub więcej obiektów źródłowych do obiektu docelowego. Jest to płytkie kopiowanie, co
oznacza, że dla zagnieżdżonych obiektów kopiowane są tylko referencje, a nie faktyczne obiekty.
• structuredClone: Umożliwia głębokie kopiowanie obiektów. Wprowadzone w ES2022. Kopiuje
zarówno prymitywne wartości, jak i struktury zagnieżdżone, utrzymując ich strukturę i zawartość.
UŻYTECZNE FUNKCJE JĘZYKA
• Wyłuskania (spread)
UŻYTECZNE FUNKCJE JĘZYKA
• Wyłuskanie
UŻYTECZNE OPERATORY
• Rest - Zapis ten umożliwia zbieranie w jedną zmienną (będącą tablicą)
wielu parametrów przekazywanych do funkcji
Typu nullish – to typy nullo podobne (undefined i null). Uwaga: false nie jest nullish!
Webstorm
(po najechaniu kursorem na kod
posiadający dokumentacje)
TYPESCRIPT
• Semantyczny nadzbiór języka JavaScript.
• Każdy poprawny kod JS będzie kompatybilny z TS
• Kod TS nie jest kompatybilny z JS (inna składnia)
• Aby uruchomić kod TS w Node (lub przeglądarce) konieczna jest transpilacja
do JS
• Motywacja: statyczna kontrola typów (na etapie
implementacji/transpilacji)
TYPESCRIPT
• TypeScript jest kompilowalny (transpilowalny) do JavaScript. Typy z kodu wynikowego są
usuwane
• Wynikowy JavaScript można uruchomić w przeglądarce lub NodeJS
JavaScript
TypeScript
TYPESCRIPT
• Typy:
• string
• number
• boolean
• tablice (np. number[])
• tuples (np. [number, string])
• any
• unie (number | string) konkretny typ można sprawdzić operatorem typeof
• null i undefined
• Enum
• BigInt (liczby do 253-1)
• Wnioskowanie typów: const liczba = 4;
https://www.typescriptlang.org/docs/handbook/2/everyday-types.html
TYPESCRIPT
• Typ • Interfejs
• Zarówno typ jak i interfejs służą do opisu „kształtu danych”, ale nie
zawierają ŻADNEJ funkcjonalności. W większości przypadków można
je używać wymiennie.
• Typ jest aliasem dla innych typów lub zbiorów typów
• Interfejsy to umowa określająca wymagania, które musi spełniać obiekt.
• Obie informacje są tracone przy transpilacji do JS (w przeciwieństwie do klas)
KONTROLA TYPÓW W TYPESCRIPT
TypeScript wprowadza statyczną kontrolę typów. To oznacza, że zanim kod zostanie
skompilowany do czystego JavaScript, TypeScript sprawdza, czy wszystkie zmienne, funkcje itp.
są używane zgodnie z zadeklarowanymi typami.