Zpět na blog
Vzdělávání

Ako sa tvorí JavaScript

Lubomir Herko
02.05.2020
7 minut čtení

Tento rok nám frajeri z TC-39 (ak nevieš čo TC-39 je, čítaj ďalej) naservírujú novú verziu ECMAScript špecifikácie - novinky, ktoré môžeme ako vývojári používať pri programovaní v JavaScript-e. BigInt, optional chaining, Promise.allSettledString.matchAllglobalThis a iné.

O tom, aké problémy riešia tieto nové funkcionality si povieme v ďalšom blogu. Tento text je venovaný špecifikácii ECMAScript a okrem iného sa dočítaš:

  • prečo potrebujeme špecifikáciu na to, ako implementovať JavaScript Engine v prehliadači
  • prečo sa špecifikácia nevolá JavaScript, ale ECMAScript a čo je to vlastne tá ECMA
  • ako dlho trvá, kým sa nápad novej funkcionality jazyka JavaScript stane jeho súčasťou

ECMAScript?

V roku 1995 vyhrával oscary Tom Hanks s filmom Forest Gump, v rádiách fičal Gansta's Paradise od Coolia a web BBC vyzeral takto:


80% používateľov internetu surfovalo v prehliadači Netscape Navigator a Microsoft ešte len končil vývoj Internet Explorer-a. Ak ho vôbec niekedy dokončili.

Nie všetci boli spokojní s tým, ako web vtedy fungoval: statický obsah, zdieľanie dokumentov a žiadny pohyb. Softvérový inžinier z Netscape - Mark Andreessen - chcel vytvoriť jazyk, ktorý by s ľahkosťou používali nielen vývojári, ale aj dizajnéri a do webov priniesli štipku interaktivity. Buttony a tak.

Brendan Eich (meno si treba zapamätať - je to frajer) je človek, ktorý tento programovací jazyk začal tvoriť. Prvým pokusom bola implementácia jazyka SCHEME do prehliadača Netscape.

Mimochodom - javisti v SUN Microsystems premýšľali nad spôsobom, ako spúšťať Java kód v prehliadači, čím tiež priniesli interaktivitu do webových stránok. Táto implementácia však nebola jednoduchá na používanie, a preto ostala voľbou korporátnych mastičov. Mocha (takto sa volala prvá verzia dnešného JavaScriptu) bola vytvorená ako alternatíva pre dizajnérov a vývojárov.

Mocha » LiveScript » JavaScript vs JScript

Vytvorenie prvej verzie Mocha trvalo len 10 dní. Neskôr bol tento jazyk premenovaný na LiveScript a potom na finálny JavaScript. Fun fact: slovo "Java" sa tam nedostalo náhodou - bol to však len marketingový spôsob, ako sa zviesť na popularite jazyka Java.

Internet Explorer chcel tiež držať krok s dobou, a preto začali aj v MS pracovať na implementácii čohosi, čo bolo veľmi podobné JavaScriptu. Finálny jazyk sa volal JScript. Implementácia však bola natoľko odlišná od JavaScript-u, že tieto implementácie neboli navzájom kompatibilné! Výsledkom bola skutočnosť, že nebolo možné vytvoriť jeden web, ktorý by fungoval v oboch prehliadačoch.

Tak vznikli vtedy slávne nálepky do footerov: "Best viewed in Internet Explorer" a "Best viewed in Netscape Navigator".


Tvoriť weby v tej dobe nebola žiadna sranda, vývojári volali po štandarde, ktorý zjednotí implementácie JavaScriptu a JScriptu. Preto bol vytvorený štandard ECMAScript, ktorý zastrešila organizácia ECMA International. Tá fungovala už dávno predtým a jej úlohou bolo práve vytvárať štandardy pre informačné a komunikačné systémy. Od novembra 1996 existuje teda štandard ECMAScript, ktorý popisuje, ako má byť implementovaný JavaScript Engine.

Fun fact: štandard nemôže niesť ikonický názov JavaScript, pretože na toto slovo až do dnešného dňa vlastní copyright firma Oracle.

ECMA-262 a TC-39 - whaaat?

ECMA International zastrešuje veľa štandardov, ten, ktorý sa týka implementácii JavaScriptu dostal číslo 262. ECMA-262 je teda názov štandardu, ktorý opisuje implementáciu JavaScriptu. Nie je to žiadne príjemné čítanie, aha.

Komisia (rozumej: živé bytosti, ľudia), ktorá rozhoduje o tom, aké nové funkcie bude nová verzia JavaScriptu obsahovať, dostala zase názov TC-39. Členom tejto komisie nie je hocikto. Sú to frajeri - vybraní ľudia, ktorí zastupujú veľké firmy pôsobiace na online trhu (Facebook, PayPal, Google, Amazon, Mozilla...)

Nová funkcionalita v JS - schvaľovací proces

Členovia TC-39 organizujú meetingy (väčšinou online) každé dva mesiace. Cieľom týchto meetingov je dopodrobna rozkecať a zanalyzovať, ktoré funkcie bude obsahovať nová verzia ECMAScript, alebo aké opravy budú v tejto verzii vykonané. Zaujímavé je, že táto komisia funguje na princípe zhody - takmer všetci členovia komisie musia súhlasiť s návrhom, aby sa ním čo i len začali zaoberať.

Celkom zaujímavé je napríklad sledovať, ako sa dostala do JavaScript-u podpora pre BigInt - brutálne veľké čísla. Lebo v JavaScripte sme doteraz mohli používať len strašne veľké čísla.

Stage 0

Každý návrh začína na takzvanej nultej úrovni - Stage 0. Niektorý z členov TC-39 vytvorí dokument, ktorý popisuje danú funkcionalitu a aký problém rieši. Na meetingu členov TC-39 tento problém prednesie a členovia rozhodli, že napr. BigInt je super vec a posunuli ho do ďalšieho Stage-u.

Stage 1

Stage 1 je parádny úspech a zároveň to znamená, že niekedy v budúcnosti bude pravdepodobne daná funkcionalita súčasťou JavaScriptu. Všetkým (alebo takmer všetkým) členom TC-39 sa tento nápad páči a súhlasia s ním. Môže to však trvať roky. BigInt funkcionalita musí byť ešte podrobnejšie popísaná, musí obsahovať príklady, ako sa bude používať a analýzu, či to neprinesie aj nejaké problémy.

Stage 2

Takzvaný Draft. V tejto fáze je viac menej isté, že funkcionalita bude súčasťou JavaScript-u a preto musí byť ešte podrobnejšie popísaná. Toto je tiež stage, kedy sa premýšľa nad vhodnou syntaxou a rôznymi detailami používania novej funkcionality. V prípade BigInt funkcionality napr. členovia rozhodli, že bude vhodné, ak BigInt číslo bude obsahovať na konci znak n - aby prehliadač (engine) vedel, že pracuje s brutálne veľkým číslom, a nie len strašne veľkým číslom.

const bigIntCislo   = 12345n;
const obycajneCislo = 12345;

Stage 3

Funkcionalita je takmer hotová a potrebuje feedback od vývojárov a vonkajšieho sveta. Všetci testujú BigInt vo svojich programoch. Tvorcovia internetových prehliadačov sa predbiehajú, kto z nich bude podporovať BigInt ako prvý - pretože implementovať BigInt už má zmysel.

Stage 4

Všetko je otestované a BigInt je súčasťou špecifikácie ECMAScript. Hotovo.

Záver

Celý proces napr. v prípade BigInt trval 2 roky. Viem si predstaviť, že schvaľovanie niektorých ešte komplexnejších funkcionalít môže trvať ešte dlhšie. Frajerom z TC-39 ale môžeme ďakovať za to, že do JavaScriptu sa dostávajú naozaj len veci, ktoré dávajú zmysel.

Lubomir Herko
Ruby on Rails programátor, otec štyroch detí, manžel jednej manželky. V Skillmea vediem vývoj a raz za dva roky publikujem článok.

Mohlo by tě zajímat

Vzdělávání
21.04.2020
Skillmea tím

Amazon a Learn2Code prinášajú bezplatné webináre a online kurzy pre deti

Kým sú školy zatvorené, prežívajú neľahký čas rodičia, učitelia i deti. Ale vďaka jednoduchým nástrojom sa domáce vzdelávanie môže stať zaujímavým a kreatívnym zážitkom. Túto myšlienku si osvojili aj v spoločnosti Amazon a rozhodli sa ponúkať bezplatné online webináre pre deti. Amazon nadviazal partnerstvo so združením Learn2Code, ktoré pre širokú verejnosť poskytuje kurzy tvorby webstránok, programovania webových a mobilných aplikácií a ďalšie témy. Ich cieľom je sprístupniť mladej generácii digitálne vzdelávanie, učia ich rozumieť marketingu, pracovať s grafikou a videom. V rámci partnerstva spoločnosť Amazon zastrešuje sériu webinárov Code Jungle Česko pod taktovkou skúsených odborníkov z praxe z Learn2Code. Všetky webináre, ktoré sa budú konať 2-krát do týždňa, vždy v pondelok a štvrtok budú pre všetkých účastníkov vďaka spolupráci s Amazonom úplne zadarmo až do konca júna 2020. Webináre sú určené pre deti približne od 10 rokov. Počas webinárov sa zoznámia s programovaním v jazyku Scratch a vytvoria si niekoľko atraktívnych hier. Prvý sa bude konať vo štvrtok 23. 4. 2020, od 15:00. Každý z webinárov bude trvať 75 minút a dajú sa absolvovať aj jednotlivo. Záznam všetkých webinárov bude dostupný na Learn2Code YouTube kanáli. „Prostredníctvom týchto bezplatných online webinárov, chceme osloviť deti, ktoré zostávajú doma, a podeliť sa s nimi o vedomosti a zručnosti budúcnosti kreatívnym a pútavým spôsobom,“ povedala Blanka Fijołek, CEE PR & komunitná manažérka spoločnosti Amazon. Druhou časťou tejto spolupráce je poskytnutie všetkých online kurzov pre deti od Learn2Code účastníkom od teraz až do konca júna 2020 bezplatne. Ide o 15 online kurzov, ktoré pozostávajú z 30 vyučovacích hodín a účastníci dostávajú aj domáce úlohy na precvičenie preberanej látky. Kurzy slúžia aj ako podklad pre učiteľov informatiky. „Sme veľmi radi, že vďaka spolupráci s Amazonom môžeme poskytnúť všetky prebiehajúce online kurzy pre deti až do konca júna zadarmo“, povedal Marián Kristeľ marketing & operations z Learn2Code a dodal: „žijeme v mimoriadnej situácii a takto chceme pomôcť rodičom a tiež naučiť zábavným spôsobom deti niečo nové a užitočné“.  Kompletný zoznam kurzov a prihlasovanie nájdete tu. O webinároch Code Jungle Česko:Webináre budú prebiehať 2x týždenne online, cez nástroj na webináre ZOOM. Zamerané sú na programovanie hier v prostredí Scratch. Rozsah vyučovacej jednotky je 60 minút plus 15 minút priestor vyhradený na otázky. Počas webinárov sa budú programovať veľké hry ako napr. Flappy Bird, Pacman, Super Mario a ďalšie. Vek účastníkov sa odporúča minimálne 10 rokov. Potrebný je vlastný laptop alebo počítač. Do konca júna 2020 zorganizujeme takmer 20 webinárov. Jednotlivé webináre budú zverejnené na YouTube a budú dostupné pre všetkých zdarma. Kompletný zoznam webinárov a všetky informácie nájdete tu. Ako sa môžete zúčastniť webinárov?UPDATE: Webináre Code Jungle boli ukončené.
Vzdělávání
18.04.2020
Miroslav Beka

Úvod do Data Science a Machine Learning

Na začiatku, keď človek vstupuje do Data Science je veľmi dôležité pochopiť, čo sa skrýva za rôznymi označeniami. Ľudia si vedia niektoré pojmy mýliť a preto by som v tomto článku rád veľmi zrýchlene prešiel cez niektoré základné súčasti. Data Science je procesZa týmto výrazom sa skrýva celá postupnosť úloh, ktoré musí datascience inžinier vykonať. Prvá fáza je silne prepojená s biznisom. Používajú sa tu preto rôzne biznis výrazy (Business Intelligence). Ako efektívne vieme využiť softvér na dosiahnutie cieľov firmy? Pracovať pre firmu ako data scientist si vyžaduje pochopenie potrieb biznisu. V tejto fáze je tiež veľmi dôležité odkomunikovať, aké sú možnosti Data Science a čo je možné reálne dosiahnuť a čo nie. Veľa manažérov totiž nerozumie technickej stránke veci a ty ako datascience inžinier si tam na to, aby si im to vysvetlil ľudskou rečou. Druhá fáza je príprava dát. Nejaké dáta môže mať firma už nazbierané, iné treba kúpiť alebo nájsť nový spôsob ako zozbierať to, čo potrebuješ. Takže tu sa budeš hrabať v databázach, vyťahovať rôzne dáta, spájať všetko dokopy do nejakého zmyslupného celku. Taktiež musíš vedieť vizualizovať tieto dáta, aby si videl, čo máš na ruke. Treba si overiť, že dáta majú tú kvalitu, akú očakávaš. Často sa totiž stáva, že dáta sú chybné, nekvalitné, v iných jednotkách a podobne. Na to si musíš dávať veľký pozor. V tretej fáze začneme pracovať na modeli. To, čo sme zistili v predchádzajúcich krokoch, musíme "preložiť" do reči machine learning. Aký model použiť (vzhľadom na to, aké máš dáta), aké informácie sa z modelu vieme dozvedieť a ako to súvisí s biznisom. Štvrtá fáza by nám mala vypľuť hotový model pripravený na používanie. Tu všetky tie naše úvahy a predpoklady musíme pretaviť do kódu a natrénovať model na dátach. Znie to jednotucho, ale nie je to úplne easy. Hlavne to záleží od toho, aké kvalitné dáta máš k dispozícii. Piata fáza sa opäť dotýka silne biznisu. V prvom rade musíme vedieť zhodnotiť, či model skutočne rieši náš problém, ktorý sme chceli vyriešiť a či je v tom dobrý. Tu zvykneme vytiahnuť ďalšie dáta, ktoré model ešte nevidel (testovacie dáta) a otestovať úspešnosť modelu. Výstupom by mala byť krásna prezentácia so všakovakými grafmi a vysvetlivkami, aby to tí "z hora" pochopili a dali ti palec hore. Machine LearningMachine Learning je súčasťou Data Science a venuje sa algoritmom, programovaniu a trénovaniu modelu. Tento výraz si ľudia zamieňajú s umelou inteligenciou. Aby sme v tom mali jasno, umelá inteligencia využíva techniky machine learning, aby napodobnila ľudskú inteligenciu vo všeobecnosti. Umelá inteligencia sa zaoberá aj tým, ako ľudia interagujú s inteligentným agentom a aby sa ľudia cítili pohodlne, keď interagujú so strojom. Čiže je tam toho zahrnutého oveľa viacej (napr. aj psychológia). Machine Learning je tu a teraz a dennodenne sa používa. Sú to pokročilé algoritmy a techniky, ktoré spracujú nejaké dáta a vypľujú výsledok. Sú úzko špecializované na jednu a jedinú úlohu. ML techník a algoritmov je mnoho a každý rieši určitý malinký podiel tej umelej inteligencie. SlovníkToto odvetvie sa len tak hemží rôznymi výrazmi. Tieto stránky obsahujú základné výrazy, na ktoré určite narazíš a je dobré vedieť, čo znamenaju: • https://towardsdatascience.com/the-new-data-scientist-glossary-4a2c14bf550 • http://www.datascienceglossary.org/ • https://developers.google.com/machine-learning/glossary/ DatasetyExistuje viacero stránok, ktoré ponúkajú svoje dáta verejne a zadarmo. Inak väčšinou treba za dáta tvrdo platiť a kopec firiem si na zhromažďovaní dát vytvorili biznis. Googlenie určite pomôže nájsť mnohé stránky, ktoré ponúkajú svoje dáta. Tu je zoznam niekoľkých populárnych stránok: • https://www.kaggle.com/datasets • https://data.world/ • https://archive.ics.uci.edu/ml/index.php • http://academictorrents.com/ • https://www.reddit.com/r/datasets/ • https://datasetsearch.research.google.com/ Ak chceš vedieť viac o Data Science a Machine Learningu, prihlás sa do môjho online kurzu Python Data Science. Ak máš pripomienky alebo otázky k článku, smelo sa pýtaj v komentároch.
Vzdělávání
03.04.2020
Skillmea tím

Konštruktory v Jave

V tomto článku sa pozrieme, čo je to konštruktor v Jave (constructor in java). Na čo sa používa? Čo je to? Trieda slúži na opis a výrobu objektov. Skúsme teraz porozmýšľať nad reálnym objektom – napríklad auto. Ak chceme opísať auto do programu, tak na opis auta použijeme triedu. Čo má auto? Aké vlastnosti? Má počet dverí, značku, EČV, objem kufra a ďalších xy vecí. Nie všetky budeme používať. V našom projekte si vytvoríme novú triedu: Pomenujeme ju Auto a napíšeme tam globálne premenné. public class Auto { int doorCount; String brand; String plateNumber; }Teraz si vytvoríme objekt typu Auto. Na výrobu objektov budeme používať konštruktor. Konštruktor ako názov naznačuje slúži na skonštruovanie nového objektu. Bez toho, aby si ty sám napísal nejaký konštruktor, tak máš jeden dostupný automaticky. Tento sa volá – bezparametrický konštruktor – je to akoby metóda, ktorá na vstupe nemá parametre. Preto je možné vyrobiť nový objekt pomocou new Auto(); public class Auto { int doorCount; String brand; String plateNumber; public static void main(String[] args) { Auto auto = new Auto(); } }V programe sme použili new Auto() aj keď nič takéto nemáme napísané. Čo môžeme spraviť, je napísať si takýto konštruktor sami. public class Auto { int doorCount; String brand; String plateNumber; public Auto() { } public static void main(String[] args) { Auto auto = new Auto(); } }Do vnútra tohto konštruktoru si môžeme teraz napísať ľubovoľný kód. Konštruktory sa najčastejšie využívajú popri výrobe nového objektu aj k nastaveniu dát. Napríklad, ak chcem vyrobiť auto, ktoré je značky Škoda, tak vyrobím nový – druhý konštruktor, ktorého vstupný parameter bude práve počet dverí. Volať chceme Auto auto = new Auto(“Škoda”); public Auto(String brand) { }Čo ale spravíme s touto premennou brand, ktorú máme ako parameter? Ak pouvažujeme, tak chceme nastaviť globálnu premennú brand pre tento nový objekt. Ale ako poviem, že globálna premenná brand nech sa rovná tomu, čo je v parametry metódy brand? Spravím to pomocou kľúčového slova this. Slovo this sa odkazuje na práve tento nový objekt, ktorý konštruujeme. Teda this sa viaže na novo vyrobený objekt z triedy Auto. Po správnosti by som mal povedať, že this odkazuje na inštanciu (instance) objektu. Pomocou konštruktoru vyrobíme novú inštanciu triedy Auto. Ak vyrobím 5 objektov, tak som vyrobil 5 inštancií triedy Auto. Takže this.brand ukazuje kam? Slovo this ukazuje na danú inštanciu objektu a cez bodku pristupujem k veciam dostupným v danej inštancii auta. Čo je tam dostupné? Teraz sú dostupné globálne premenné. Tak spravím: public Auto(String brand) { this.brand = brand; } public static void main(String[] args) { Auto auto = new Auto("Škoda"); }Po zavolaní tohto konštruktoru mám v premennej auto odkaz na objekt Auto s nastevným brand na Škoda. Takto si teraz môžem vytvárať nové inštancie typu Auto. public static void main(String[] args) { Auto auto = new Auto("Škoda"); Auto auto2 = new Auto("Škoda"); }Sú tieto dve autá rovnaké? Nie, nie sú, aj keď majú taký istý brand. Prečo? Lebo ak voláme slovíčko new, tak sa vytvára vždy úplne nový objekt v pamäti. Ukážka konštruktoru, kde nastavujeme všetky globálne premenné. V IDEI stlač ALT+Insert a vyber konštruktor – následne označ všetky premenné. Tieto premenné sa inak nazývajú aj fieldy. public Auto(int doorCount, String brand, String plateNumber) { this.doorCount = doorCount; this.brand = brand; this.plateNumber = plateNumber; } public static void main(String[] args) { Auto auto = new Auto("Škoda"); Auto auto2 = new Auto("Škoda"); Auto auto3 = new Auto(4, "Opel", "CCdddDD"); }Nové objekty môžeš vytvárať kde chceš a kedy chceš. Teraz som to robil v metóde main priamo v triede Auto. To ale samozrejme väčšinou robiť nebudeš. Viac o konštruktoroch v Jave a Java programovaní sa dozvieš v našich online kurzoch Java a OOP pre začiatočníkov a Java pre pokročilých. Ak máš nejaké otázky k tomuto blogu, napíš ich do komentárov 👇

Nezmeškaj info o nových kurzoch a špeciálnych ponukách