Kategória: Web fejlesztés → JavaScript.
Az olyan "komoly" programozási nyelvekkel dolgozó fejlesztők, mint a Java, a C++ vagy a C#, hajlamosak lenézni a JavaScript-et (és az abban fejlesztőket), mondván, hogy az csak egy játék, nem is igazi programozási nyelv, azzal csak a baj van, és mivel a keretrendszerek úgyis többnyire elfedik a részleteket, az ebben fejlesztők tulajdonképpen nem is igazi szoftverfejlesztők. Ha megnézzük a JavaScript történelmét, korábbi állapotait, akkor ezek az állítások nem is teljesen alaptalanok.
Azonban az évtizedek során a JavaScript igencsak kicsiszolódott, és mai, modern formájában mondhatjuk, hogy a felsorolt nyelvek egyenrangú vetélytársává nőtte ki magát. Ennek az anyagnak a leírása - mely rengeteg tanulással, utána járással járt - számomra elsősorban erre mutatott rá.
Ebben a fejezetben azokat nézzük meg (részben ismét), amelyek a JavaScript-et valóban modern programozási nyelvvé teszik.
A JavaScript története
Amint arról már volt szó, a JavaScript megjelenését nem előzte meg egy gondos szabványosítás, sőt, pont ellenkezőleg: adott problémára adtak megoldást, amiből aztán kinőtte magát a JavaScript. Egészen pontosan: Netscape böngészőben megjelent először Mocha néven, majd átnevezték LiveScript-re, végül JavaScript-re. Kezdetben a HTML annyit biztosított csak, hogy létre hozta a <script> tag-et, de azt nem definiálta, hogy ezzel mit lehet kezdeni. Hosszú ideig nem is volt alapértelmezett script nyelv; ma már a JavaScript hivatalosan is az.
Szabvánnyá a JavaScript csak 1997-ben lett, amikor az ECMA (Európai informatikai és kommunikációs rendszerek szabványosítási szövetsége) szabványosította ECMAScript néven. Két jelentősebb mérföldkő volt az ECMAScript eddigi életében: a 2009-ben kiadott 5-ös verzió (szokás ES5-ként is hivatkozni rá), valamint a 2015-ben megjelent 6-os verzió. Ezeket nézzük meg itt egy kicsit bővebben.
Az alábbi oldalak segítettek ennek a szakasznak a megírásában:
- https://www.w3schools.com/js/js_versions.asp
- https://babeljs.io/docs/en/learn
- http://es6-features.org/
- https://github.com/lukehoban/es6features
ES5
Az alábbi újításokat vezették be ebben a verzióban:
- Bevezették a "use strict" direktívát. Ez azt jelenti, hogy enélkül úgy is tudunk változókat használni, hogy nem deklaráljuk őket; a "szigorú módban" ez hibának minősül. (Feltételezem - de nem vagyok benne biztos -, hogy ez egy próbálkozás volt a JavaScript problémás részeinek kigyomlálására: a kompatibilitási kényszer miatt kivenni nem lehet nyelvi elemeket, de strict módban már ez hibásnak minősüljön. Végül - úgy tűnik - csak a nem deklarált változók esetében használatos, de a tapasztalatom szerint ott sem feltétlenül működik.)
- Fejlesztették az adatszerkezeteket, különösen a tömböket (Array). Bevezették a folyam (stream) jellegű műveleteket, mint pl. a filter(), a map() és a reduce().
- Bevezették a JSON-t.
- Kibővítették a String adattípust.
- Ebben nem vagyok teljesen biztos, de úgy tudom, hogy ebben a verzióban szabványosították a HTML elem lekérdezéseket, pl. getElementById.
ES6
Véleményem szerint a 2015-ös szabvánnyal tették a JavaScript-et igazán professzionálissá. Az ekkor bevezetett legfontosabb újítások az alábbiak:
- Átgondolták a változókezelést. Bevezették a változót és a konstanst, a többi programozási nyelvben megszokott hatókörrel.
- Bevezették azokat a nyelvi elemeket, amellyel valódi objektumorientált működést lehet elérni (pl. class, példányosítás, öröklődés, konstruktor stb.).
- Bevezették a nyíl függvényeket (arrow functions). A JavaScript kezdettől fogva (vagy legalábbis nagyon korai verzióitól kezdve) funkcionális nyelv is volt, a nyíl függvényekkel viszont egész tömör, a funkcionális programozásra jellemző tömörítési lehetőséget tettek lehetővé.
- Bevezették a függvények alapértelmezett értékeit (ilyen még a Java-ban sincs, pedig nagyon hasznos lenne), valamint a maradék paraméter (function f(a, b, …c)) lehetőségét is.
- Bevezették a generátorokat.
- Bevezették az ún. spread operátort (…), mellyel két tömböt lehet egymásba fűzni.
- Egyszerűsítettek az objektumokon is: pl. az {x: x, y: y} helyett írhatjuk ezt is: {x, y}
- Bevezették a string interpolációt (`Hello, ${name}!`).
- Ettől kezdve tetszőleges unicode karaktert használhatunk.
- Kibővítették a gyűjtemény típusok alapkönyvtárát, számos újítást vezettek be: új adattípusokat (Set, Map, WeakSet, WeakMap).
- Lehetővé tették a tömb mintaillesztést (let [a, b] = [1, 2];).
- Lehetővé tették (meglepően csak most először) a modularizálást.
- Számos új osztályt szabványosítottak, pl. Reflect, Promise, Proxy stb.
És még sok minden mást!
NodeJS
TODO
Modul rendszerek
TODO
CommonJS
TODO
WebPack
Babel
ESLint
TODO
JS Fiddle
TODO: http://jsfiddle.net/