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

Jak se tvoří JavaScript

Lubo Herko
02.05.2020
7 minut čtení
Jak se tvoří JavaScript
Letos nám frajeři z TC-39 (nevíš-li co TC-39 je, čti dále) naservírují novou verzi ECMAScript specifikace - novinky, které můžeme jako vývojáři používat při programování v JavaScriptu. BigInt, optional chaining, Promise.allSettled, String.matchAll, globalThis a další.

O tom, jaké problémy řeší tyto nové funkcionality, si povíme v dalším blogu. Tento text je věnován specifikaci ECMAScript a mimo jiné se dočteš:
  • proč potřebujeme specifikaci na to, jak implementovat JavaScript Engine v prohlížeči
  • proč se specifikace nevolá JavaScript, ale ECMAScript a co je to vlastně ta ECMA
  • jak dlouho trvá, než se nápad nové funkcionality jazyka JavaScript stane jeho součástí


ECMAScript?

V roce 1995 vyhrál oscar Tom Hanks s filmem Forrest Gump, v rádiích fičel Gansta's Paradise od Coolia a web BBC vypadal takto:

80% uživatelů internetu surfovalo v prohlížeči Netscape Navigator a Microsoft teprve končil vývoj Internet Exploreru. Pokud ho vůbec někdy dokončili.
Ne všichni byli spokojeni s tím, jak web tehdy fungoval: statický obsah, sdílení dokumentů a žádný pohyb. Softwarový inženýr z Netscape - Mark Andreessen - chtěl vytvořit jazyk, který by s lehkostí používali nejen vývojáři, ale také designéři a do webů přinesli špetku interaktivity. Buttony a tak.
Brendan Eich (jméno je třeba si zapamatovat - je to frajer) je člověk, který tento programovací jazyk začal tvořit. Prvním pokusem byla implementace jazyka SCHEME do prohlížeče Netscape.
Mimochodem - jevisté v SUN Microsystems přemýšleli nad způsobem, jak spouštět Java kód v prohlížeči, čímž také přinesli interaktivitu do webových stránek. Tato implementace však nebyla jednoduchá na používání, a proto zůstala volbou korporátních mastičů. Mocha (takto se jmenovala první verze dnešního JavaScriptu) byla vytvořena jako alternativa pro designéry a vývojáře.

Mocha » LiveScript » JavaScript vs JScript

Vytvoření první verze Mocha trvalo jen 10 dní. Později byl tento jazyk přejmenován na LiveScript a poté na finální JavaScript. Fun fact: slovo „Java“ se tam nedostalo náhodou – byl to však jen marketingový způsob, jak se svést na popularitě jazyka Java.
Internet Explorer chtěl také držet krok s dobou, a proto začali iv MS pracovat na implementaci čehosi, což bylo velmi podobné JavaScriptu. Finální jazyk se jmenoval JScript. Implementace však byla natolik odlišná od JavaScriptu, že tyto implementace nebyly navzájem kompatibilní! Výsledkem byla skutečnost, že nebylo možné vytvořit jeden web, který by fungoval v obou prohlížečích.
Tak vznikly tehdy slavné nálepky do footerů: „Best viewed in Internet Explorer“ a „Best viewed in Netscape Navigator“.
Tvořit weby v té době nebyla žádná legrace, vývojáři volali po standardu, který sjednotí implementace JavaScriptu a JScriptu. Proto byl vytvořen standard ECMAScript, který zastřešila organizace ECMA International. Ta fungovala už dávno předtím a jejím úkolem bylo právě vytvářet standardy pro informační a komunikační systémy. Od listopadu 1996 existuje tedy standard ECMAScript, který popisuje, jak má být implementován JavaScript Engine.

Fun fact: standard nemůže nést ikonický název JavaScript, neboť na toto slovo až do dnešního dne vlastní copyright firma Oracle.

ECMA-262 a TC-39 - whaaat?

ECMA International zastřešuje mnoho standardů, ten, který se týká implementace JavaScriptu obdržel číslo 262. ECMA-262 je tedy název standardu, který popisuje implementaci JavaScriptu. Není to žádné příjemné čtení, aha.
Komise (rozuměj: živé bytosti, lidé), která rozhoduje o tom, jaké nové funkce bude nová verze JavaScriptu obsahovat, dostala zase název TC-39. Členem této komise není leckdo. Jsou to frajeři – vybraní lidé, kteří zastupují velké firmy působící na online trhu (Facebook, PayPal, Google, Amazon, Mozilla...)

Nová funkcionalita v JS - schvalovací proces

Členové TC-39 organizují meetingy (většinou online) každé dva měsíce. Cílem těchto meetingů je dopodrobna rozkecat a zanalyzovat, které funkce bude obsahovat nová verze ECMAScript, nebo jaké opravy budou v této verzi provedeny. Zajímavé je, že tato komise funguje na principu shody – téměř všichni členové komise musí souhlasit s návrhem, aby se jím byť jen začali zabývat.
Zcela zajímavé je například sledovat, jak se dostala do JavaScriptu podpora pro BigInt – brutálně velká čísla. Protože v JavaScriptu jsme dosud mohli používat jen strašně velká čísla.


Stage 0

Každý návrh začíná na takzvané nulté úrovni – Stage 0. Některý z členů TC-39 vytvoří dokument, který popisuje danou funkcionalitu a jaký problém řeší. Na meetingu členů TC-39 tento problém přednese a členové rozhodli, že např. BigInt je super věc a posunul ho do dalšího Stage-u.


Stage 1

Stage 1 je parádní úspěch a zároveň to znamená, že někdy v budoucnu bude pravděpodobně dána funkcionalita součástí JavaScriptu. Všem (nebo téměř všem) členům TC-39 se tento nápad líbí a souhlasí s ním. Může to však trvat roky. BigInt funkcionalita musí být ještě podrobněji popsána, musí obsahovat příklady, jak se bude používat a analýzu, zda to nepřinese i nějaké problémy.


Stage 2

Takzvaný Draft. V této fázi je víceméně jisté, že funkcionalita bude součástí JavaScriptu a proto musí být ještě podrobněji popsána. Toto je také stage, kdy se přemýšlí nad vhodnou syntaxí a různými detaily používání nové funkcionality. V případě BigInt funkcionality např. členové rozhodli, že bude vhodné, pokud BigInt číslo bude obsahovat na konci znak n - aby prohlížeč (engine) věděl, že pracuje s brutálně velkým číslem, a ne jen strašně velkým číslem.
const bigIntCislo   = 12345n;
const obycajneCislo = 12345;


Stage 3

Funkcionalita je téměř hotová a potřebuje feedback od vývojářů a vnějšího světa. Všichni testují BigInt ve svých programech. Tvůrci internetových prohlížečů se předbíhají, kdo z nich bude podporovat BigInt jako první – protože implementovat BigInt už má smysl.


Stage 4

Vše je otestováno a BigInt je součástí specifikace ECMAScript. Hotovo.

Záver

Celý proces např. v případě BigInt trval 2 roky. Umím si představit, že schvalování některých ještě komplexnějších funkcionalit může trvat ještě déle. Frajerům z TC-39 ale můžeme děkovat za to, že do JavaScriptu se dostávají opravdu jen věci, které dávají smysl.
Lubo 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

Amazon a Learn2Code přinášejí bezplatné webináře a online kurzy pro děti
Vzdělávání
21.04.2020
Skillmea tím

Amazon a Learn2Code přinášejí bezplatné webináře a online kurzy pro děti

Dokud jsou školy zavřené, prožívají nelehký čas rodiče, učitelé i děti. Ale díky jednoduchým nástrojům se domácí vzdělávání může stát zajímavým a kreativním zážitkem. Tuto myšlenku si osvojili také ve společnosti Amazon a rozhodli se nabízet bezplatné online webináře pro děti. Amazon navázal partnerství se sdružením Learn2Code, které pro širokou veřejnost poskytuje kurzy tvorby webstránek, programování webových a mobilních aplikací a další témata. Jejich cílem je zpřístupnit mladé generaci digitální vzdělávání, učí je rozumět marketingu, pracovat s grafikou a videem. V rámci partnerství společnost Amazon zastřešuje sérii webinářů Code Jungle Česko pod taktovkou zkušených odborníků z praxe z Learn2Code. Všechny webináře, které se budou konat dvakrát do týdne, vždy v pondělí a čtvrtek budou pro všechny účastníky díky spolupráci s Amazonem zcela zdarma až do konce června 2020. Webináře jsou určeny pro děti přibližně od 10 let. Během webinářů se seznámí s programováním v jazyce Scratch a vytvoří si několik atraktivních her. První se bude konat ve čtvrtek 23. 4. 2020, od 15:00. Každý z webinářů bude trvat 75 minut a lze je absolvovat i jednotlivě. Záznam všech webinářů bude dostupný na Learn2Code YouTube kanálu. „Prostřednictvím těchto bezplatných online webinářů, chceme oslovit děti, které zůstávají doma, a podělit se s nimi o znalosti a dovednosti budoucnosti kreativním a poutavým způsobem,“ řekla Blanka Fijołek, CEE PR & komunitní manažerka společnosti Amazon. Druhou částí této spolupráce je poskytnutí všech online kurzů pro děti od Learn2Code účastníkům od teď až do konce června 2020 bezplatně. Jedná se o 15 online kurzů, které sestávají z 30 vyučovacích hodin a účastníci dostávají i domácí úkoly k procvičení probírané látky. Kurzy slouží také jako podklad pro učitele informatiky. „Jsme velmi rádi, že díky spolupráci s Amazonem můžeme poskytnout všechny probíhající online kurzy pro děti až do konce června zdarma“, řekl Marián Kristel marketing & operations z Learn2Code a dodal: „žijeme v mimořádné situaci a takto chceme pomoci rodičům a také naučit zábavným způsobem děti něco nového a užitečného“. Kompletní seznam kurzů a přihlašování najdete zde. O webinářích Code Jungle Česko:Webináře budou probíhat 2x týdně online, přes nástroj na webináře ZOOM. Zaměřeny jsou na programování her v prostředí Scratch. Rozsah vyučovací jednotky je 60 minut plus 15 minut prostor vyhrazený pro otázky. Během webinářů se budou programovat velké hry. Flappy Bird, Pacman, Super Mario a další. Věk účastníků se doporučuje minimálně 10 let. Potřebný je vlastní laptop nebo počítač. Do konce června 2020 zorganizujeme téměř 20 webinářů. Jednotlivé webináře budou zveřejněny na YouTube a budou dostupné pro všechny zdarma. Kompletní seznam webinářů a veškeré informace naleznete zde. Jak se můžete zúčastnit webinářů?UPDATE: Webináře Code Jungle byly ukončeny.
Úvod do Data Science a Machine Learning
Vzdělávání
18.04.2020
Miroslav Beka

Úvod do Data Science a Machine Learning

Na začátku, kdy člověk vstupuje do Data Science je velmi důležité pochopit, co se skrývá za různými označeními. Lidé si umějí některé pojmy mýlit a proto bych v tomto článku rád velmi zrychleně prošel přes některé základní součásti. Data Science je procesZa tímto výrazem se skrývá celá posloupnost úkolů, které musí datascience inženýr provést. První fáze je silně propojena s byznysem. Používají se zde proto různé byznys výrazy (Business Intelligence). Jak efektivně umíme využít software k dosažení cílů firmy? Pracovat pro firmu jako data scientist vyžaduje pochopení potřeb byznysu. V této fázi je také velmi důležité odkomunikovat, jaké jsou možnosti Data Science a čeho lze reálně dosáhnout a co ne. Spousta manažerů totiž nerozumí technické stránce věci a ty jako datascience inženýr jsi tam na to, abys jim to vysvětlil lidskou řečí. Druhá fáze je příprava dat. Nějaká data může mít firma již nasbíraná, jiná je třeba koupit nebo najít nový způsob jak sesbírat to, co potřebuješ. Takže tady se budeš hrabat v databázích, vytahovat různá data, spojovat všechno dohromady do nějakého smysluplného celku. Také musíš umět vizualizovat tato data, abys viděl, co máš na ruce. Třeba si ověřit, že data mají tu kvalitu, jakou očekáváš. Často se totiž stává, že data jsou vadná, nekvalitní, v jiných jednotkách a podobně. Na to si musíš dávat velký pozor. Ve třetí fázi začneme pracovat na modelu. To, co jsme zjistili v předchozích krocích, musíme „přeložit“ do řeči machine learning. Jaký model použít (vzhledem k tomu, jaká máš data), jaké informace se z modelu umíme dozvědět a jak to souvisí s byznysem. Čtvrtá fáze by nám měla vyplivnout hotový model připravený k používání. Tady všechny ty naše úvahy a předpoklady musíme přetavit do kódu a natrénovat model na datech. Zní to jednotuše, ale není to úplně easy. Hlavně to záleží na tom, jak kvalitní data máš k dispozici. Pátá fáze se opět dotýká silně byznysu. V první řadě musíme umět zhodnotit, zda model skutečně řeší náš problém, který jsme chtěli vyřešit a zda je v tom dobrý. Zde zvykneme vytáhnout další data, která model ještě neviděl (testovací data) a otestovat úspěšnost modelu. Výstupem by měla být krásná prezentace se všelijakými grafy a vysvětlivkami, aby to ti "shora" pochopili a dali ti palec nahoru. Machine LearningMachine Learning je součástí Data Science a věnuje se algoritmům, programování a trénování modelu. Tento výraz si lidé zaměňují s umělou inteligencí. Abychom v tom měli jasno, umělá inteligence využívá techniky machine learning, aby napodobila lidskou inteligenci obecně. Umělá inteligence se zabývá také tím, jak lidé interagují s inteligentním agentem a aby se lidé cítili pohodlně, když interagují se strojem. Čili je tam toho zahrnuto mnohem více (např. i psychologie). Machine Learning je tady a nyní a dennodenně se používá. Jsou to pokročilé algoritmy a techniky, které zpracují nějaká data a vyplivují výsledek. Jsou úzce specializovány na jeden a jediný úkol. ML technik a algoritmů je mnoho a každý řeší určitý malinký podíl té umělé inteligence. SlovníkToto odvětví se jen tak hemží různými výrazy. Tyto stránky obsahují základní výrazy, na které určitě narazíš a je dobré vědět, co znamenají: • https://towardsdatascience.com/the-new-data-scientist-glossary-4a2c14bf550 • http://www.datascienceglossary.org/ • https://developers.google.com/machine-learning/glossary/ DatasetyExistuje několik stránek, které nabízejí svá data veřejně a zdarma. Jinak je většinou třeba za data tvrdě platit a kopec firem si na shromažďování dat vytvořily byznys. Googlene jistě pomůže najít mnohé stránky, které nabízejí svá data. Zde je seznam několika populárních stránek: • 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/ Pokud chceš vědět více o Data Science a Machine Learningu, přihlas se do mého online kurzu Python Data Science.Pokud máš připomínky nebo dotazy k článku, směle se ptej v komentářích.
Konstruktory v Javě
Vzdělávání
03.04.2020
Skillmea tím

Konstruktory v Javě

V tomto článku se podíváme, co je to konstruktor v Javě (constructor in java). K čemu se používá? Co je to? Třída slouží k popisu a výrobě objektů. Zkusme nyní popřemýšlet nad reálným objektem – například auto. Pokud chceme popsat auto do programu, tak k popisu auta použijeme třídu. Co má auto? Jaké vlastnosti? Má počet dveří, značku, RZ, objem kufru a dalších xy věcí. Ne všechny budeme používat. V našem projektu si vytvoříme novou třídu:[Image] Pojmenujeme ji Auto a napíšeme tam globální proměnné. public class Auto { int doorCount; String brand; String plateNumber; }Nyní si vytvoříme objekt typu Auto. K výrobě objektů budeme používat konstruktor. Konstruktor jako název naznačuje slouží ke zkonstruování nového objektu. Aniž bys ty sám napsal nějaký konstruktor, tak máš jeden dostupný automaticky. Tento se jmenuje – bezparametrický konstruktor – je to jakoby metoda, která na vstupu nemá parametry. Proto je možné vyrobit nový objekt pomocí new Auto(); public class Auto { int doorCount; String brand; String plateNumber; public static void main(String[] args) { Auto auto = new Auto(); } }V programu jsme použili new Auto() i když nic takového nemáme napsáno. Co můžeme udělat, je napsat si takový konstruktor sami. public class Auto { int doorCount; String brand; String plateNumber; public Auto() { } public static void main(String[] args) { Auto auto = new Auto(); } } Do nitra tohoto konstruktoru si nyní můžeme napsat libovolný kód. Konstruktory se nejčastěji využívají vedle výroby nového objektu ik nastavení dat. Například pokud chci vyrobit auto, které je značky Škoda, tak vyrobím nový – druhý konstruktor, jehož vstupní parametr bude právě počet dveří. Volat chceme Auto auto = new Auto(“Škoda”); public Auto(String brand) { }Co ale uděláme s touto proměnnou brand, kterou máme jako parametr? Pokud uvažujeme, tak chceme nastavit globální proměnnou brand pro tento nový objekt. Ale jak řeknu, že globální proměnná brand ať se rovná tomu, co je v parametru metody brand? Udělám to pomocí klíčového slova this. Slovo this se odkazuje na právě tento nový objekt, který konstruujeme. Tedy this se váže na nově vyrobený objekt ze třídy Auto. Po správnosti bych měl říci, že this odkazuje na instanci (instance) objektu. Pomocí konstruktoru vyrobíme novou instanci třídy Auto. Pokud vyrobím 5 objektů, tak jsem vyrobil 5 instancí třídy Auto. Takže this.brand ukazuje kam? Slovo this ukazuje na danou instanci objektu a přes tečku přistupuji k věcem dostupným v dané instanci auta. Co je tam k dispozici? Nyní jsou dostupné globální proměnné. Tak udělám: public Auto(String brand) { this.brand = brand; }public static void main(String[] args) { Auto auto = new Auto("Škoda"); }Po zavolání tohoto konstruktoru mám v proměnné auto odkaz na objekt Auto s nastevním brandem na Škoda. Takto si nyní můžu vytvářet nové instance typu Auto. public static void main(String[] args) { Auto auto = new Auto("Škoda"); Auto auto2 = new Auto("Škoda"); } Jsou tato dvě auta stejná? Ne, nejsou, i když mají stejný brand. Proč? Neboť voláme-li slovíčko new, tak se vytváří vždy zcela nový objekt v paměti. Ukázka konstruktoru, kde nastavujeme všechny globální proměnné. V IDEI stlač ALT+Insert a vyber konstruktor – následně označ všechny proměnné. Tyto proměnné se jinak nazývají také fieldy.[Image] 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ářet kde chceš a kdy chceš. Teď jsem to dělal v metodě main přímo ve třídě Auto. To ale samozřejmě většinou dělat nebudeš. Více o konstruktorech v Javě a Java programování se dozvíš v našich online kurzech Java a OOP pro začátečníky a Java pro pokročilé. 

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