4 min read

Szintaktika

Szintaktika

Ez a szó több cikkben is megjelent, és bár teljesen értelmes magyar szó, nem biztos, hogy kontextusba tudtad helyezni a programozással kapcsolatban. A szintaktika a programozásban azt a formát, szerkezetet takarja, amivel le tudod írni a gép számára, hogy mit hajtson végre. Van pár egyszerű szabály, amit be kell tartanod, de alapjában véve a nyelv nagyon "megengedő", azaz viszonylag nagy szabadságod van. A szintaktikát a legtöbb szövegszerkesztő színekkel kiemeli neked a könnyebb olvashatóság érdekében, ezen kívül jelzi is ha esetleg hibát vétenél, ami különösen hasznos az első pár hétben, hónapban amíg ismerkedsz a nyelvvel. Nézzük azokat a fogalmakat, melyet a szintaktika kapcsán érdemes megemlíteni:

Whitespace (WS)

Talán a legtalálóbban üres karakternek lehet magyarra fordítani, mert tulajdonképpen ezt jelenti: minden olyan karaktert, mely a szövegszerkesztőben karakterként funkcionál (helyet foglal a stringben), de vizuálisan nem látszik, whitespace-nek nevezünk. A két legismertebb whitespace amivel te is találkozhattál már, ha használtál bármilyen szövegszerkesztőt a "space" és a "tab". A space egy, míg a tab beállítástól függően több üres karaktert (igazából egyet az is, de a szélessége változó) szúr a dokumentumba. Pont a tab inkonzisztens viselkedése miatt a programozási gyakorlatban a tab-ot át szokás konvertálni fix mennyiségű space karakterre (javascript esetében a 2 space az ajánlott, de a 4 space is igen elterjedt). A harmadik, talán kevésbé ismert whitespace a sortörés, amely rendszertől függően egy (unix like) vagy két karaktert (windows) foglal el. Bár billentyűzetről normál gépelés mellett ezek a whitespacek kerülhetnek leggyakrabban a dokumentumunkba, jó ha tudjuk, hogy az unicode karaktertábla összesen 25 féle WS karaktert különböztet meg.

A javascriptben a whitespaceknek nincs semmilyen jelentése. A spacek, tabok és sortörések szabadon használhatók. Míg az értelmezőt tulajdonképpen nem zavarja a "rendezetlenség" minket jó eséllyel annál inkább.

Csak a kis ember tart rendet, a zseni átlátja a káoszt.

Saját jól felfogott érdekünk, hogy ne kelljen "összevissza" formázott programot nézegetnünk, így kiváló formázó kiegészítők (extension-ök) könnyítik meg számunkra a konzisztens kód formázást.
Van pár igen speciális eset, amikor pl. egy space hiánya problémát okozhat a kód értelmezésében. Vegyük elő az operátorokról szóló cikkben szereplő kódunkat és írjuk át picit:

var a="4";
var b="2";
var c=a+b;
var d=b+a;
var e=+a++b;
console.log(c, d, e);

Látható, hogy kivettem a szóközöket és a "b" változó string típusú lett, de az 5. sorban továbbra is számként próbáljuk összeadni őket az unary plus operátor segítségével. Sajnos a ++ egy létező másik operátor, így már a kódunk nem egyértelmű (és hibát is kapunk arra a sorra). Ahhoz, hogy a b változót számmá alakítsuk ki kell raknunk a space-t az operátor elé, hogy ne olvadjon egybe a másikkal:

var e=+a+ +b;

Ha nem összeadni szeretnénk, hanem pl. kivonni, akkor a szóközre továbbra sincs szükség:

var e=+a-+b;

Ha szóközökkel tagoljuk a sorunkat, akkor számunkra sokkal olvashatóbb kód születik:

var e = +a - +b;

Identifiers

Azonosító: olyan karakterek sorozata, mellyel azonosítani tudsz egy változót, függvényt vagy objektumot. Az első karakternek betűnek (tehát szám nem!), underscore-nak (_) vagy dollárjelnek ($) kell lennie. Bár elméletileg az első karakter az unicode táblából bármilyen betű lehet (pl. var ááááá; teljesen megengedett és hiba nélkül végrehajtódik) a gyakorlatban törekedjünk a beszédes változó- és függvénynevek használatára és lehetőleg kerüljük a nem angol ABC betűit.
A $ jelet általában a DOM egyes elemeinek referálására szokás használni, de ez nem szabály, csak szokás.
Jópár név van amit nem használhatunk azonosítónak, mert részei a nyelvnek (pl. a megismert operátorok használata azonosítóként nem lehetséges: var delete = 42; var typeof = 42;).
Javascriptben az azonosítókat az úgynevezett camelCase formában szokás használni (ahogy a WS-ek, úgy ez a szokás sem érdekli az értelmezőt), ahol az első betű kisbetű, majd minden új szó első betűje nagybetű. Az oszályok (később lesz róluk szó) definiálásakor az úgynevezett PascalCase a megszokott, ami a camelCase-től abban tér el, hogy már az első karakter is nagybetű. Két másik elterjedt forma van, melyeket a JS-ben nem igazán használnak, de a teljesség kedvéért: snake_case, kebab-case (ez utóbbi nem is használható, szintaktikailag hibás).

Literals

Magyarul a "szó szerinti" vagy "betűszerinti" fordítást használjuk. A literálok olyan értékek (szám: 42, string: "42", boolean: true, stb), melyeket szó szerint kell értelmezni.

Case sensitive

Kis és nagy betű érzékeny, tehát a var foo = "bar"; és a var Foo = "bar"; két külön változó deklarálását jelenti.
Szegény Nemecsek Ernő ha ezt tudta volna, akkor nem érte volna traumaként, hogy nevét csupa kisbetűvel írták a közgyűlési jegyzőkönyvbe, hiszen "Nemecsek Ernő" !== "nemecsek ernő"

Comments

Megjegyzések. Ezen sorokat az értelmező figyelmen kívül hagyja, ezek valójában azoknak szólnak akik a későbbiekben használni fogják a programunkat (akár saját magunknak is). Bár igyekszünk beszédes neveket használni, melyek megkönnyítik a kód későbbi megértését, ezek gyakran nem elegendőek, hogy a teljes képet lássuk. Ne sajnáljuk az időt a commentek írására, később ez a plusz ráfordított idő többszörösen megtérül. Ha typescriptről fordítunk javascriptet, vagy ha az alap javascript kódot átfuttatjuk pl. egy minifier-en (olyal program, amely kiszedi az összes, a futáshoz nem szükséges elemet a kódból, mint pl. a megjegyzések, WS-ek. Ezen kívül beállítástól függően egyéb optimalizációkat is elvégezhet, de erre majd később visszatérünk.), akkor ezek a megjegyzések bele sem kerülnek a végső kódba. A commenteknek két formája van:

  • //: sima egysoros megjegyzés melyet bárhol elhelyezhetünk
// Answer to the Ultimate Question of Life, the Universe, and Everything
var idiotVariableName = 42;
var anotherIdiotVariableName = "It doesn't help"; // explain it here
  • /*: többsoros (multi-line) comment, melyet a */ zár le
/* If you are a chatty person,
where you cannot express yourself
with a single line, or just want
to demonstrate the multi-line comment
then you can use this form */
var see = "Simple, right?";

Semicolons

Programunk minden sorát opcionálisan pontosvesszővel zárjuk le. Igen, opcionálisan. Míg sok nyelvnél (pl. JAVA) a pontosvessző nem opcionális, JS esetében az értelmező van annyira okos, hogy eldöntse hol ér véget a kifejezésünk és hol kezdődik a következő, és automatikusan elhelyezi a pontosvesszőt helyettünk (ezt a folyamatot ASI-nak, azaz Automatic Semicolon Insertion-nek hívjuk).

Személy szerint engem zavarnak a pontosvesszők (nekem rontják a kód olvashatóságát), ezért én nem használom őket (pár kivételtől eltekintve, amire azonban a szerkesztő fel is hívja a figyelmet).

A pontosvessző kedvelt vitatéma programozók körében, ha nem akarsz értelmetlen perceket, órákat pazarolni a drága idődből, akkor kerüld ezt a témát

Zárszó

Bár most megismerkedtél pár fogalommal, amikor programot írsz ne így képzeld el:

var (keyword) myAge (identifier) = (assignment operator) 42 (numeric literal)

Amikor magyarul beszélsz akkor sem mantrázod magadban, hogy alany, állítmány, tárgy, határozó, jelző, stb. Ezeket a fogalmakat azért kell megtanulni, hogy ha beszélni kell róla, akkor nevén tudd nevezni őket. Egyébként jönni fognak maguktól.

Mit tanultál ebben a leckében?

  • megtanultad, hogy mi a neve az egyes programsorok részeinek