Keretrendszer vagy könyvtár? Szükségünk van rájuk, vagy sem?

Keretrendszer vagy könyvtár? Szükségünk van rájuk, vagy sem?

Mindenki, aki JavaScriptben fejleszt, elkerülhetetlenül találkozik néhány keretrendszerrel / függvénykönyvtárral, és ugyanilyen elkerülhetetlenül használja is egyiket, másikat… harmadikat, negyediket, ötödiket… Ismerős? Szerencsére nem annyira elvetemült a helyzet, mint néhány éve, amikor öt percenként jött ki egy JavaScript keretrendszer, az ember (nem a keretrendszer) pedig nem győzte kapkodni a fejét.

Egyrészt már az első mondatban is nem véletlen írtam, hogy: keretrendszerrel / függvénykönyvtárral. Néhányan rögtön nyilvános lincselésre kárhoztatnának, ha egy Reactet lekeretrendszerezek, vagy egy Angulart lekönyvtárazok, és mivel igyekszem ügyelni testi épségemre, ezért jelen esetben a megfelelő szóhasználat amolyan kötelező egészségmegőrzési célzattal is szolgál, a pontosság mellett. Ha már így szóba került a dolog, mi a különbség a könyvtár, és a keretrendszer között? Hol húzódik a határvonal? Eddig két nagyon jó megfogalmazással találkoztam:

  • Attól függ, hogy te hívod őt, vagy ő hív téged. (IoC)
  • Ha a te kódod írod bele, akkor keretrendszer, ha az ő kódját húzod be a sajátodba akkor könyvtár.

Ezek alapján viszonylag könnyen behatárolható lehet(ne), melyik-melyik. Egy jQuery esetében egyértelmű, hogy akkor és ott használjuk a saját kódunkban, ahol, és amikor akarjuk. Összevetve egy Vue-val, ahol létrehozzuk a Vue instance-t, használjuk a megadott metódusokat, és azokba írjuk a kódunkat.

A gyakorlatban azonban gyakran összemosódnak a határvonalak. Nézzünk is erre egy példát:

  • A React oldalán ez olvasható: A JavaScript library for building user interfaces
  • A Vue oldalán: The Progressive JavaScript Framework

Két hasonló dologról van szó, mégis az egyik könyvtárként, a másik keretrendszerként aposztrofálja saját magát.

Akkor most hogy is van ez?

A Vuenál még ennyi kiegészítést olvashatunk: An incrementally adoptable ecosystem that scales between a library and a full-featured framework. Szóóóóval: is-is! Ahogy valójában ez a Reactre is ugyanígy ráhúzható. Én ekkor engedtem el a dolgot, és adtam fel, hogy szigorúan megkülönböztessem a kettőt. Nincs globálisan elfogadott definíció, tényleg attól függ, hol, mennyire szigorúan húzzuk meg azt a bizonyos határvonalat. De egyáltalán szükségünk van arra, hogy elhatároljuk a kettőt egymástól? Feltétlenül meg kell különböztetnünk őket frontenden? Úgy gondolom, hogy nem. Sőt, még nagyobb kérdés, egyáltalán szükségünk van keretrendszerekre? Ez utóbbi sem költői kérdés volt, még akkor sem, ha sokan nagyon csúnyán nézve olvasták vissza az előző sort.

Nagyon röviden ki is fejtem pró és kontra, és elmagyarázom az én álláspontom.

Kezdem is a kontrákkal. Az fő probléma, hogy ha egy adott keretrendszer ismeretét az általa használt nyelv ismerete elé helyezzük. Magyarán úgy kezdünk el keretrendszereket használni, hogy valójában az adott nyelv – jelen esetben a JavaScript – alapjaival sem vagyunk tejesen tisztában.

Ne rögtön ide akarjunk ugrani:

Porsche
Forrás: http://i.telegraph.co.uk

Persze lehet kiokoskodjuk, hogy indul el, hogy kell kormányozni, teszünk vele egy kört kemény 20km/órás tempóval, de az egész nagyon döcögni fog, és nem egy életbiztosítás.

Mindez nem azt jelenti, hogy egy adott nyelv mélyreható ismerete nélkül ne tudnánk használni egy keretrendszert, csupán azt, hogy nem érdemes. Egy keretrendszeren keresztül megtanulni egyrészt magát a keretrendszert, és az adott nyelvet is nem a legszerencsésebb választás. Érdemes inkább egy jól meghatározott sorrendben haladni a tanulmányainkkal. HTML, CSS, egy CSS keretrendszer, JavaScript haladó szinten, és ha ezek stabil lábakon állnak jöhetnek a JavaScript keretrendszerek.

A másik kontra, hogy ha megismerünk, és megszeretünk egy keretrendszert hajlamossá válhatunk minden feladatra azt használni. Egy darab végtelenül egyszerű UI komponenst lefejleszteni Angularral nem az ágyúval verébre, hanem a Halálcsillaggal a bolhára kategória. Minden feladathoz válasszuk ki a megfelelő eszközt, és ne szubjektív megítélés alapján döntsünk. Ne ragadjunk le egy ismert keretrendszernél, tanuljunk mindig új és új dolgokat, mert ezáltal is fejlődünk, és ezáltal a saját piaci értékünket is növeljük.

Adnak bármi olyat a keretrendszerek, amit nélkülük nem tudnánk megvalósítani? Nem, hiszen az adott nyelvre épülnek. Mindent ugyanúgy meg tudunk valósítan a használatuk nélkül is, és ne féljünk VanillaJS-ben kódolni, hisz ezáltal ismerjük meg igazán a nyelvet.

Akkor miért is van rájuk szükség, mi az a plusz, amit nyújtanak? Nem akarok felsorolni mindent, a fejlesztés sebességétől, a közösségtől, a dokumentációtól, az újra felhasználhatóságon át a konvenciókig (na tessék, mégis felsoroltam), de úgy gondolom a valódi ok elég egyszerű:

Nem kell újra feltalálni a spanyolviaszt!

Miért írnánk meg valamit, ha azt mások már megtették. Ráadásul valószínűleg elég jól, hiszen sok ezer fejlesztő használja a kódbázisukat nap, mint nap.

A keretrendszerek létjogosultsága megkérdőjelezhetetlen, nézzük csak meg a frontendes álláshirdetéseket. Szinte mindenhol az Angular, React, elvétve egyéb keretrendszerek ismeretére is szükségünk van. Tehát amennyiben a célunk egy jó állás megcsípése, a különböző keretrendszerek minél mélyebb ismerete egyértelmű előnyt jelent, de ne felejtsük el, a keretrendszerek ismerete nem váltja ki a nyelv ismeretét!

Gáll Gergely

Kapcsolódó tanfolyamok

  1. A React library alapjai
  2. A VueJS keretrendszer alapjai
Vissza a hírekhez