Javascript je jeden z nejpoužívanějších jazyků na světě a to díky jeho možnosti využití v různých prostředích. Má jednoduchou syntaxi, rozsáhlý ekosystém a co je nejdůležitější, velkou komunitu.
Javascript je také jazyk první volby pro vytváření webových aplikací (v prohlížeči) a vpodstatě jedinou možností, jak v současnosti v tomto prostředí můžete psát použitelné aplikace. Může být, ale použit také pro vývoj mobilních a desktopových aplikací. Může být použítý na serveru v IOT zařízeních a dalších platformách.
Vyhrál v konkurenci s pluginy do prohlížeče jako je Adobe Flash, Silverlight, Java Aplety. Je to tím, že je tento jazyk tolik flexibilní? Specifická kombinaci vlastností, které mu poskytují široké možnosti a schopnosti použití pro různé úlohy.
Když se někdo snaží stručně popsat javascriptu uvede ho jako scriptovací, multiplatformní, multiparadigmatický, dynamicky typovaný jazyk. Co však tyhle pojmy přesně znamenají? Pojďme si je jeden po druhém rozebrat.
Multiplatformní
Javascript je všestranný, protože ho můžete používat na všech operačních systémech, které mají webový prohlížeč, který JavaScript podporuje. Operačními systémy Windows, MacOS a Linux, stejně jako mobilních zařízení s operačními systémy iOS a Android jsou tedy samozřejmostí.
Kromě prohlížečů se neustále rozšiřuje škála prostředí, ve kterých JS běží Jinými slovy, to, jak je JS implementován pro webové prohlížeče, je ve vší praktičnosti jediná skutečnost, na které záleží.
- jako desktopová aplikace v Electronu
- na mobilu v React Native, PhoneGap či Flutteru
- na serveru jako backend pomocí Node.js a Express.
- v aplikacích pro IoT (roboty, žárovky, …) pomocí technologií jako Johnny-Five
V zásadě tedy může být JavaScript použit na široké škále platform a zařízení, a to jak na straně klienta, tak na straně serveru.
Skriptovací jazyk
Skriptovací jazyk se liší obvykle od "programovacího" jazyka tím, že je interpretovaný, nikoli kompilovaný. Slovo "skript" bylo v době vzniku Javascriptu populární pro označení miniaturních programů. Tyto lehké "skripty" se měly vkládat do webových stránek a dodávat jim interaktivitu. Skriptovací jazyky jsou obvykle rychlejší na naučení, protože se člověk nemusí učit zacházet s kompilátorem. Bývají však pomalejší v praxi při vykonávání úloh, protože se kód interpretuje při spuštění, nikoli předtím. Tato vlastnost z něj ani nedělá druhořadý jazyk, pro lidi, kteří by kompilaci nepochopili. V Javascriptu se dají programovat libovolně složité algoritmy jako v jakémkoliv jiném jazyce, protože je stejně tak Turingovsky úplný. V dnešní době bývá proces sestavení některých aplikací v Javascriptu i složitější.
Kód v JS se negeneruje spustitelné binárky, ale je interpretován a spouštěn přímo v prohlížeči nebo v runtime prostředí. V samostatném článku je tento postup interpretace popsán.
Dynamicky typovaný
Je slabě dynamicky typovaný s poměrně složitou typovou konverzí (koercí), která mate i zkušené vývojáře. Datovým typům věnujeme samostatné články - např. primitivní datové typy.
Dynamicky typovaný jazyk může být snadnější na naučení a může umožnit větší flexibilitu při psaní kódu, protože nemusíte příliš myslet na typy proměnných. Nicméně, může to také způsobit některé problémy, jako je třeba nutnost přetypovat proměnné nebo runtime chyby (když se nad proměnnou použije operace s neodpovídajícím typem). V některých případech může být použití pevně typovaného jazyka výhodnější, protože vás upozorní na chyby při kompilaci a ne až při spuštění kódu.
Multiparadigmatický
Paradigmata jsou mentální modely, kterým se řídí a formují způsoby, jakým programátoři přistupují k problémům a řešením, jak strukturují a udržují svůj kód.
Javascript může být popsán jako imperativní, objektově orientovaný a funkcionální jazyk. Nemůžete nevšimnout, že se v imperativních jazycích neustále objevují nové funkcionální funkce. Dokonce i Java podporuje lambdy.
- Imperativní: má schopnost příkazovat počítači, aby vykonával určité úlohy, jako je C nebo BASIC. Obsahuje příkazy pro vykonávání akcí, jako je například cyklus nebo podmínky, a můžete také definovat funkce, které obsahují sady příkazů pro opakované vykonávání.
- Objektově orientovaný: má také objektově orientované vlastnosti, což znamená, že můžete vytvářet objekty s vlastnostmi a metodami, které jsou spojené s těmito objekty. Můžete také vytvářet třídy pro definování objektů s podobnými vlastnostmi a metodami a můžete používat dědičnost pro zdědění vlastností a metod mezi třídami.
- Funkcionální: můžete používat funkce jako hodnoty (high-order) a předávat je jako argumenty do jiných funkcí. Můžete také používat koncepty jako klíčová slova "lambda" a "curry", které jsou charakteristické pro funkcionální jazyky.
Tahle vlastnost nám dává obrovskou svobodu se vyjadřovat, na druhou to neusnadňuje začátečníkům, kteří se snaží porozumět zdrojovým kódům různých repozitářů, které dodržují jiné paradigma a konvence.
Synchronní
Javascript je synchronní, což znamená, že náš kód interpretuje řádek po řádku, od shora dolů. Nikdy nepřejde na další řádek, dokud nedokončí úlohu na aktuálním řádku.
Možná jste si ale všimli, že spousta webových aplikací se chová asynchronně. Běžně na webu načítáme data z jiného serveru, toto čekání může trvat stovky milisekund a přitom aplikace stále funguje dál. Jak tohle probíhá?
Asynchroní akce se neprovádí vrámci čistého JavaScript Enginu.
Čistý JavaScript neví, jak interagovat s interpretem. Místo toho všechny tyto funkce sedí mimo JavaScript.
V prohlížeči je spousta funkcí, ke kterým v JavaScriptu máme přístup prostřednictvím Web Browser API
.