Modern JavaScript

Kategória: Web fejlesztésJavaScript.

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:

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

https://webpack.github.io/

Babel

https://babeljs.io/

ESLint

TODO

JS Fiddle

TODO: http://jsfiddle.net/

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License