A következő címkéjű bejegyzések mutatása: 12B. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: 12B. Összes bejegyzés megjelenítése

2024. november 11., hétfő

12B Új elem létrehozása - createElement() és appendChild() metódusok

 A createElement és appendChild metódusok a JavaScript DOM manipulációjának alapvető eszközei. Segítségükkel új HTML elemeket hozhatunk létre és adhatunk hozzá a meglévő dokumentumhoz.

createElement metódus

A createElement metódus egy új HTML elemet hoz létre, amelyet később hozzáadhatunk a DOM-hoz. A metódusnak egy paramétere van: az új elem típusának neve (pl. div, p, span stb.).

Szintaxis:

let újElem = document.createElement("elemNév");

Példa:

let újDiv = document.createElement("div");

Ez a kód létrehoz egy új <div> elemet, amely jelenleg csak egy JavaScript változóban létezik, és még nincs hozzáadva az oldalhoz.

appendChild metódus

Az appendChild metódus segítségével egy már létező HTML elemhez adhatunk egy új elemet (például azt, amelyet a createElement-tel hoztunk létre). Az appendChild a szülő elemhez hozzáad egy gyermeket, amely a szülő elem utolsó gyermekeként jelenik meg.

Szintaxis:

szülőElem.appendChild(gyerekElem);

Példa:

let újDiv = document.createElement("div"); // új div létrehozása újDiv.textContent = "Ez egy új div elem"; // tartalom hozzáadása a div-hez document.body.appendChild(újDiv); // a div hozzáadása a dokumentum törzséhez (body)

Ebben a példában a createElement létrehoz egy <div> elemet, amelynek beállítjuk a textContent tulajdonságát, majd az appendChild metódussal hozzáadjuk a dokumentum törzséhez, így az megjelenik az oldalon.

Gyakorlati példa - Egy listaelemek hozzáadása egy üres <ul>-hez:

// Egy <ul> elem létrehozása let ulElem = document.createElement("ul"); // Egy tömb, amelyből listaelemeket hozunk létre let elemek = ["Elem 1", "Elem 2", "Elem 3"]; // Listaelemek hozzáadása a <ul>-hez elemek.forEach(elemTartalom => { let liElem = document.createElement("li"); // új <li> elem létrehozása liElem.textContent = elemTartalom; // tartalom hozzáadása ulElem.appendChild(liElem); // <li> hozzáadása a <ul>-hez }); // A <ul> elem hozzáadása a dokumentum törzséhez document.body.appendChild(ulElem);

Ez a kód létrehoz egy <ul> elemet, amelyhez három <li> elemet fűz hozzá, majd a teljes <ul> elemet hozzáadja az oldalhoz.

https://www.w3schools.com/jsref/met_document_createelement.asp

https://www.w3schools.com/jsref/met_node_appendchild.asp

13B MVC – modell nézet vezérlő

 

A böngésző két irányú kommunikációt folytat a szerverünkkel, egyrészt küld kéréseket, másrészt kap válaszokat. Elküldi a kérést a webszervernek, az átmegy bizonyos részeken és az ún controllerek, controller osztályok azok, amelyek megkapják ezeket a kéréséket. A kontroller azt csinálja, hogy egyrészt kapcsolatba lép az adatbázissal, ezt a modell osztályon keresztül teszi meg, és a modell osztályban vannak azok a függvények, amelyek lekérdezik az adatbázisból az adatokat, de semmi mással nem foglalkozik csak adatlekérdezéssel. Lekérdezi, írja, olvassa, updateli, törli az adatokat, tehát csak az adatbázissal foglalkozik.

Lekéri az adatokat a controller az adatbázisból, majd utána beolvassa a nézetet, az adatokat elhelyezi abban az állományban, amit a nézet létrehozott neki, majd ezután küldi a webszervernek, az pedig a böngészőnek vissza küldi az elkészült dolgokat. Tehát a controller az olyan, mint egy karmester a zenekarban, ő irányítja az adatbázis, ő irányítja a megjelenítést. A program kódot nagyon könnyű ez által karban tartani, vagy akár tovább fejleszteni, ha így kerül felépítésre egy rendszer. Ugyanis ha valamit szeretnénk változtatni az adatkezelésen, nem kell az egész kódot átböngésznünk, csak a modellel kell foglalkoznunk. Ha a nézeten a view-en szeretnénk változtatni akkor csak a nézettel kell foglalkoznunk, nem kell az egész kódot újra reorganizálni, átdolgozni ahhoz, hogy megváltoztassuk az alkalmazásunkat, és ez ugyanígy igaz a controllerre is.

Az MVC (Model-View-Controller) egy népszerű szoftverarchitektúra, amelyet a Laravel és más keretrendszerek használnak. Az MVC célja, hogy a kód struktúráját rendezetten és jól kezelhetően tartsa, azáltal, hogy a kódot három különálló rétegbe szervezi: Model, View, és Controller. Lássuk, hogyan működnek ezek együtt:

Kérdés: Hogyan Működik Együtt Az MVC?

  • A felhasználó egy URL-t (például /users) kér le az alkalmazásból.
  • A Laravel route-ok alapján meghívja a megfelelő controllert (pl. UserController).
  • A controller meghívja a modellt, hogy hozzáférjen a szükséges adatokhoz.
  • Az adatokkal a controller betölti a megfelelő nézetet, és a view-n keresztül megjeleníti azokat a felhasználónak.

Az MVC megközelítésnek köszönhetően a különböző rétegek (adatkezelés, üzleti logika, megjelenítés) elkülönülnek, így könnyebb a kód olvasása, karbantartása és tesztelése.

1.2. Model – Az Adatok és a Logika Kezelése

A Model felelős az alkalmazás adatainak kezeléséért. Ez magába foglalja az adatbázishoz való kapcsolódást, az adatok lekérdezését, mentését és frissítését. Laravelben az Eloquent ORM-et (Object-Relational Mapping) használjuk, amely egyszerűsíti a különböző adatbázisműveletek végrehajtását.

                  Példa: Képzeljük el, hogy van egy User model, amely tartalmazza a felhasználói adatokat (pl. name, email).

                  A model lehetővé teszi, hogy a User::all() vagy User::find(1) parancsokkal könnyen lehessen adatokat lekérdezni, és Laravel automatikusan az users adatbázistáblához kapcsolódik.

1.3.View – Az Adatok Megjelenítése

A View az, ami a felhasználó számára látható – itt jelenik meg az adat vizuálisan, legyen szó egy egyszerű HTML oldalról vagy egy összetettebb felhasználói felületről. Laravelben a View réteget általában Blade sablonfájlok formájában hozzuk létre a resources/views mappában.

  • A View fogadja a controllertől kapott adatokat, majd megjeleníti azokat a felhasználónak.
  • Példa: A welcome.blade.php fájl lehet egy egyszerű kezdőoldal, ami megjeleníti a felhasználók nevét.

Tehát ezek a nézetek gyakorlatilag magát a HTML kódot tartalmazzák. A Laravel a nézetekhez a Blade sablonrendszert használja. A Blade segítségével tudod a dinamikus adatok kezelését, beszúrását elvégezni, illetve lehetőséget ad különböző vezérlési szerkezetek használatára és más nézetek beszúrására. A nézeteket a resources/views mappában találod. Lényegében az összes html fájl itt található. A blade arra kiváló, hogy a html-t és a php-t kicsit finomabb módon tudjuk együtt használni, mint a natív php esetében. pl ne kelljen minden php kód elé kezdő zárótag, stb.

A resources mappába kerülnek a js-ek, css-ek,

A lang mappába vannak a nyelvesítsére vonatkozó fájlok.  Alapértelmezetten angol van benne, ha akarunk magyart, akkor csak egy másolatot kell róla készíteni, és átnevezni hu-ra, és át kell írni benne a szövegeket magyarra. Az app.php fájlunkban, ha a nyelvet magyarra állítjuk, és talál magyar fordítást, akkor az üzeneteket magyarul fogja megjeleníteni.

1.4.Controller – A Közvetítő Réteg

A Controller az összekötő kapocs a model és a view között. A controller fogadja a felhasználói kéréseket, meghatározza, milyen adatokat kell előhívni a modelből, majd továbbítja ezeket a nézet felé, hogy a megjelenítés megtörténhessen.

                  Példa: A UserController nevű controller tartalmazhat olyan metódusokat, mint index() vagy show($id), amelyek a felhasználók listázását vagy egy adott felhasználó adatainak megjelenítését végzik.

                  Egy tipikus folyamat:

o   A felhasználó az /users oldalra lép.

o   A UserController index() metódusa megkapja a kérést, lehívja az összes felhasználói adatot a User modelből, majd elküldi ezeket a users/index.blade.php nézetnek.

Tehát a controller a nézetek és modellek közötti kapcsolatot tartja fent. Minden lekérés egy controllerbe fut be. A controller tartalmazza a program logikáját: itt töltöd be adatbázisból az adatokat, itt számolsz velük, majd a végén átadod egy nézetnek amit megkap a felhasználó. A kontrollerek az app/Http/Controllers mappában találhatóak.


2024. november 5., kedd

12 B - TODO készítése javascripttel

Aki elkészült az Állateledeles projekt javításával is, és a Iskolai átlagszámító feladattal is, gyakorolja a javascriptet, mert felelés lesz belőle. A feladatot CSS GRID-el oldjátok meg, abból is fogok kérdezni, ha tanári gépnél.

 Készíts javascripttel egy kis alkalmazást, egy jegyzettömböt. 






2024. november 3., vasárnap

12 ikt - Új projekt feladat

Az új projektben konkrét feladatot kaptok. Készítsetek egy weboldalt, amely bemutatja az osztály átlagának számítását és az elérhető pajzsokat egy verseny keretében. Kardinális kérdésetek, hány óra áll rendelkezésetekre, ikt és web órán is dolgozhattok rajta, nem választjuk élesen ketté. A héten 4 órában el kell, hogy mindenki tudja készíteni, és 5-ik, 6-ik órában megnézzük az előadásokat. Két jegyet kaptok, ikt és web-re is. Ikt-nél főleg a közös munkát fogom értékelni. Webnél a technológiát.

Görgess le végig az oldalon, a képek alatt is van egy kis segítség, ne csak annyit olvass el, ami most Neked épp a böngészőben megjelenik! Akinek nem inge ne vegye magára....

A weboldal két fő részből áll:

  1. Pajzsok oldal (főoldal)
  2. Átlagszámító oldal

1. Pajzsok oldal (főoldal - index.html)

  1. Hozz létre egy index.html fájlt, amely tartalmazza a pajzsok oldal tartalmát.
  2. Az oldal tetején jelenjen meg egy üdvözlő szöveg:
    • Cím: „Indul a tanulmányi verseny liga a pajzsokért”
    • Leírás: „Kedves diákok! A verseny során elnyerhettek egy pajzsot. Azt, hogy melyiket, az az osztály átlagától függ.”
    • Pontozás és elnyerhető pajzsok

      • 4,6-5 között Legendák ligája
      • 4-4,5 között Smaragd liga
      • 3,6-4 között Gold liga
      • 3-3,5 között Silver liga
      • 2-3 között Bronz liga
      • 2 alatt - reményeink szerint ilyen nem fordulhat elő.
  3. Egy felsorolással mutasd be az elérhető pajzsokat és az elérésükhöz szükséges átlagpontszámot.
  4. Készíts egy „pajzs” galériát a megadott képekkel (img/legends.png, img/emerald.png, stb.). Minden pajzs rendelkezzen:
    • Képpel, névvel és egy rövid leírással.
    • 3D forgatással: Amikor a felhasználó ráviszi az egeret, a pajzsok forgatással mutatják meg a hátoldalon lévő szöveget, amely az adott pajzs eléréséhez szükséges pontszámot írja le.
  5. Az oldal alján legyen egy gomb, amely a calc.html oldalra vezet. A gomb szövege: „Osztály jegyeinek átlagszámítása”.

index.html:

ha valmelyik pajzsra ráhúzzuk az egeret forduljon el, és jelenjen meg rajta az a szöveg, hogy mikor érhető el

Átlagszámító oldal (calc.html)

  1. Hozz létre egy calc.html fájlt, amely az osztály átlagának kiszámítását végzi.
  2. Az oldal tetején jelenjen meg a cím: „Osztály jegyeinek átlagszámítása”.
  3. Készíts egy szövegmezőt, amelybe a felhasználók beírhatják az osztály jegyeit (vesszővel elválasztva). A placeholder legyen: „pl. 5, 4, 3, vagy ha tizedes, akkor ponttal válaszd el: 2.7”.
  4. Készíts egy gombot „Számold ki az átlagot” felirattal, amely elindítja az átlag számítását.
  5. A gomb lenyomására:
    • Ellenőrizze a program, hogy a bevitt értékek számok-e.
    • Számolja ki az átlagot, és jelenítse meg az átlagértéket az oldalon.
    • Az átlag alapján jelenítse meg az elért pajzsot képpel együtt.
  6. Az oldal alján legyen egy visszalépési gomb, amely visszavisz az index.html főoldalra. A gomb felirata: „Vissza a főoldalra”.

ha a felhasználó felsorolja a jegyeket, akkor jelenítse meg az eredményt:


Írjatok egy javascript kódot, amely kiszámolja az eredményt, és megjeleníti az eredménynek megfelelő adatokat. 

Stílusok (style.css)

  1. Háttér: Használj zöld-arany-szürke színátmenetes hátteret a teljes oldalhoz.
  2. Középre igazítás: Minden elem legyen középre igazítva a wrapper osztály segítségével.
  3. Gombok stílusa: A gombok legyenek világoszöldek, lekerekített sarkokkal, és kapjanak árnyékot. Egérrel való rámutatáskor a háttérszín sárgára változik.
  4. Pajzsok: A pajzsok legyenek kerek keretekben, zöld árnyékkal, és a képek helyesen legyenek középre igazítva.
  5. Reszponzivitás: Gondoskodj róla, hogy a pajzsok elrendezése különböző eszközökön is jól mutasson:
    • Teljes nézetben: 5 pajzs egy sorban.
    • Tabletes nézetben: 3 pajzs egy sorban.
    • Mobil nézetben: 2 pajzs egy sorban.

4. JavaScript (calc.html-hez)

  1. Készíts egy calculateAverage függvényt, amely:
    • Feldolgozza a beírt jegyeket, ellenőrzi, hogy csak számokat tartalmaznak.
    • Számolja ki a jegyek átlagát.
    • Az eredmény alapján jelenítse meg a megfelelő pajzsot képpel és szöveggel.
  2. Ha az átlag értéke meghaladja a megadott határértékeket (pl. 4.6 és 5 között), akkor a megfelelő pajzs jelenjen meg a gratulációs szöveggel.

Példák

Pajzsok oldal - Példa tartalom

  • Legend Badge - „A jutalom, ha az osztályotok átlaga 4.6 és 5 között van.”
  • Emerald Badge - „A jutalom, ha az osztályotok átlaga 4 és 4.5 között van.”
  • Gold Badge - „A jutalom, ha az osztályotok átlaga 3.6 és 4 között van.”

Átlagszámító oldal - Példa eredmények

  • Ha az osztály átlaga 4.7, jelenjen meg a Legend Badge és az üzenet: „Gratulálok! Az osztályotok a Legend szintet érte el, az osztály átlagotok: 4.7”
Tesztelés: 

  • Teszteld az oldalt különböző képernyőméreteken, hogy minden reszponzív legyen.
  • Használd a html és css validátor oldalakat, készítsetek az eredményről képernyő képet. 
  • Ellenőrizd, hogy az összes képfájl és link helyesen van beállítva.
  • A JavaScript kódot teszteld többféle értékkel (pl. tizedesjegyekkel), hogy megbizonyosodj a helyes működésről. A kódban folyamatosan írasd ki az eredményt a konzolra, kommentezd, melyik lépéseddel milyen műveltet hajtasz végre. 
  • Értékelés szempontjai

    1. HTML felépítés - Minden szükséges elem megtalálható és helyesen van elhelyezve.
    2. CSS stílusok - A stílusok megfelelően alkalmazkodnak a feladathoz és reszponzívak.
    3. JavaScript működés - Az átlagszámítás helyesen működik, és a megfelelő pajzs jelenik meg az átlagértéktől függően.
    4. Átlátható mappa szerkezet!!! (képek külön mappában, css külön mappában)
    5. Funkcionalitás - Az oldalak közötti navigációs gombok működnek.
    6. Csapatmunka! Kinek mi volt a feladata a megoldás során. Egyetlen dolgot kérek dokumentálni, melyik órán, ki mivel foglalkozott, a feladat mely részének megoldásával, milyen segítséget vettetek igénybe.
    7. Github-ra való feltöltés!
    8. Előadás módja (hajlandóság kiállni a táblához, magabiztos előadás, felhasználói és fejlesztői szempontból is kérem, valamint röviden angol nyelven, mindkét csapattagnak kb ugyannyit kell beszélnie)
    Képek: 






    Egy kis segítség a javascript függvény megírásához:

    1. HTML előkészítése és eseménykezelő hozzáadása

      • Kezdj egy HTML fájllal, amely tartalmaz egy szövegmezőt (input, ide írhatod be a jegyeket) és egy gombot (amire kattintva elindul a számítás).
      • Külön script fájlnál ellenőrizd, csatoltad e a script.js-t. (konzolba kiírás: "fut")
      • A gombhoz adj egy eseménykezelőt, amely a kattintáskor meghív egy függvényt. Ezt JavaScript-tel tudod megtenni. Persze a script fájlban is megírhatod az esemény figyelését (addEventListener - ha nem emlékszel a működésére a w3schoolon nézz utána).
    2. Függvény létrehozása és elemek összegyűjtése

      • Hozz létre egy függvényt a JavaScript fájlban, amiben végrehajtod a számítást.
      • A függvény megírása elején azonnal elenőrizd le fut e a függvény (konzol: "fv.fut".)
      • A konzolban ellenőrizheted, hogy valóban hozzáférsz-e ezekhez a változókhoz, hogy minden a terv szerint működik-e. Amikor elkezded összegyűjteni a szükséges adatokat, ellenőrizd a konzolban kezedbe került e az eredmény, vagy az adott html elem!!!
      • A kommenteket és a konzolba való kiíratásokat hagyd benne a kódban! Onnan látom, hogy folyamatosan teszteltél, és utána néztél egy-egy beépített függvény működésének! 
      • Gyűjtsd össze azokat az elemeket, amelyeket használni fogsz:
        • Hozz létre egy változót a szövegmezőhöz, ahonnan a jegyeket fogod beolvasni.
        • Hozz létre egy változót, amiben az eredményt fogod megjeleníteni. Nyilván a html-ben is létre kell hoznod ehhez egy elemet, ahová majd megjeleníted az eredményt.
    3. A bevitt adat feldolgozása

      • A szövegmezőből olvasd ki a bevitt adatokat. Ezt tárold egy változóban.
      • Ellenőrizd a konzolban, hogy valóban megkaptad-e az adatot, és látod-e a beírt szöveget.


      • Ezen a ponton láthatod, hogy több adattal van dolgod, tehát tömbre lesz szükséged!
    4. Jegyek tömbbe alakítása

      • A beírt adatokat, amelyek vesszővel vannak elválasztva, alakítsd át tömbbé. Használj olyan függvényt, amely a szöveget külön elemekre bontja. pl. split(); map(); parseFloat(); trim() nézz utána a használatuknak a w3schoolon, és kommentbe jegyezd fel mit tudtál meg róluk, majd próbáld meg használni őket a feladat megoldása során.
      • Mivel a jegyek számként lesznek kezelve, alakítsd át a szöveges elemeket számokká. Használhatsz olyan módszert, amely minden elemet egyenként átalakít számmá.
      • Ellenőrizd a konzolban, hogy sikerült-e tömbként és számként eltárolni az adatokat.
    5. Érvényesség ellenőrzése

      • Ellenőrizd, hogy a tömbben lévő elemek mind számmá alakíthatók-e. Használhatsz olyan függvényt, amelyik megmondja, hogy van-e nem szám jellegű elem a tömbben.
      • Ha hibás adatot találsz, jeleníts meg egy figyelmeztető üzenetet, és állítsd le a számítást.
    6. Átlag számítása

      • Számold össze a tömb elemeit egy beépített módszerrel, amely minden elemet hozzáad egy kezdeti értékhez.
      • Oszd el a kapott összeget a tömb hosszával, hogy megkapd az átlagot.
      • A konzolban ellenőrizheted az átlag értékét, hogy megbizonyosodj róla, helyes-e a számítás.
    7. Eredmény megjelenítése

      • Írasd ki az átlagot a HTML-ben egy kijelölt területre, például egy üres <p> vagy <div> elembe. Használd a templateLiteral módszert, de a + jellel való konkatenális is jó. 
    8. Badge megjelenítése az átlag alapján

      • Az átlag alapján dönts el, hogy melyik „pajzsot” jeleníted meg. Használj feltételes szerkezetet, hogy különböző tartományokhoz különböző képeket rendelj.
      • Az adott tartományban állítsd be a kép forrását, és jelenítsd meg a megfelelő szöveget. Ne legyen végtelen lebegőpontos szám használd a toFixed() metódust, csak 2 tizedesig jelenjenek meg.

    Hasznos JavaScript függvények és módszerek, amelyekre érdemes rákeresni

    • addEventListener: Eseménykezelő hozzáadása egy HTML elemhez.
    • console.log: Üzenetek megjelenítése a böngésző konzoljában, ami segít a hibakeresésben.
    • split(): Szöveg elemeire bontása, például vesszők mentén.
    • map(): Minden tömbelemet átalakító metódus, például szöveget számmá alakít.
    • parseFloat(): Szöveges szám konvertálása lebegőpontos számmá.
    • some(): Annak ellenőrzése, hogy a tömb tartalmaz-e olyan elemet, amely megfelel egy feltételnek.
    • reduce(): A tömb elemeinek összegzése egy kezdőértékből kiindulva.



    2024. október 14., hétfő

    12 B web - Vacsora foglalási rendszer

     Ebben a feladatban egy egyszerű HTML és JavaScript alapú vacsora foglalási rendszert kell létrehoznod, ahol a felhasználó megadhatja a nevét, kiválaszthat egy éttermet, valamint dönthet különböző szolgáltatások mellett, mint például vacsora típus és extra szolgáltatások. A végén a rendszer kiszámítja a teljes költséget és megjeleníti a foglalás részleteit.

    Teendők:

    1. Név beírása: A felhasználó egy szövegmezőben megadja a nevét.
    2. Étterem kiválasztása: A felhasználó kiválaszthatja, hogy melyik étteremben szeretne vacsorázni. Az étteremhez tartozó költség az opciókban jelenik meg.
    3. Vacsora típusának kiválasztása: A felhasználó választhat a standard vacsora (nincs extra költség) és a gourmet vacsora között, amelyhez egy extra költség társul.
    4. Extra szolgáltatások választása: A felhasználó választhatja, hogy kér-e parkolási lehetőséget és italcsomagot. Mindkettő extra költséget jelent.
    5. Végösszeg kiszámítása: A felhasználó megnyomja a „Számold ki a végösszeget” gombot, amely kiszámítja az összes kiválasztott szolgáltatás árát és megjeleníti a végösszeget.
    6. Foglalási adatok megjelenítése: A rendszer kiírja a felhasználó nevét és a foglalás teljes költségét.

    Elvárások:

    • Az űrlap beviteli mezői a következő elemeket tartalmazzák:
      • Egy szövegmező a név megadására.
      • Egy legördülő lista, amely három különböző éttermet tartalmaz az étterem árával.
      • Rádiógombok, amelyekkel a felhasználó kiválaszthatja a vacsora típusát (standard vagy gourmet).
      • Két checkbox, amivel extra szolgáltatásokat választhat (parkoló és italcsomag).
    • A gomb megnyomásakor történjen a végösszeg kiszámítása, és a foglalás részleteinek megjelenítése.
    • Ellenőrizze a rendszer, hogy a név mező kitöltött-e, és csak akkor végezze el a számítást, ha van név megadva.
    • JavaScript-et használj a végösszeg számításához és az adatok megjelenítéséhez!

    Példák:

    • Ha a felhasználó az „Olasz Éttermet” választja (5000 Ft), gourmet vacsorát (3000 Ft), parkolót (1000 Ft) és italcsomagot (1500 Ft), a teljes költség 10 500 Ft lesz.
    • Ha nem választ extra szolgáltatásokat és a standard vacsorát kéri, akkor csak az étterem árát kell figyelembe venni.

    Bónusz feladat:

    • Tedd dinamikussá a rendszert úgy, hogy az extra szolgáltatások és vacsora típusok is különböző áron jelenjenek meg a felhasználó választása alapján.


    2024. október 7., hétfő

    12 B - Titkosírás hack avagy hogyan használju a Base64 Kódolási és Dekódolási Függvényeket



    Gondolkoztam, hogyan dobhatnám fel egy kicsit az unalmas függvény gyakorlást, ekkor jutott eszembe, hogy általánosban mindig igyekeztünk titkosírást kitalálni. Utána néztem, hogyan lehetne ezt valamiféle függvénnyel megoldani. A következőtre leltem:

    A Base64 egy kódolási eljárás, amelyet általában bináris adat (például képek, fájlok) szöveges formátumba való átalakítására használnak. A Base64 kódolás során az adatok biztonságosabban továbbíthatók olyan protokollokon keresztül, amelyek nem kezelnek jól bináris adatokat, például e-mail vagy URL-ek.

    JavaScriptben két beépített függvényt használhatunk a Base64 kódolásra és dekódolásra:

    1.     btoa() – "Binary to ASCII":

      • Ez a függvény a szöveges adatot Base64 formátumba kódolja.
      • Csak karakterláncokat fogad el, és a kódolt formátum egy ASCII-karakterlánc lesz.

    2.     atob() – "ASCII to Binary":

      • Ez a függvény a Base64 kódolt szöveget visszakódolja az eredeti formátumába.
      • Ez is karakterláncot fogad el, és karakterláncot ad vissza.

    btoa() Függvény – Kódolás

    A btoa() függvény egy szöveget Base64 formátumba kódol. Fontos megjegyezni, hogy a kódolandó szövegnek ASCII karakterekből kell állnia, mivel a btoa() nem tud Unicode karaktereket közvetlenül kezelni.

    Szintaxis:

    let encodedData = btoa(string);

    Példa:

    let originalText = "Hello, World!";
    let encodedText = btoa(originalText);
    console.log(encodedText); // "SGVsbG8sIFdvcmxkIQ=="
    • Magyarázat: A "Hello, World!" szöveget Base64 formátumba kódoljuk, amelynek eredménye: SGVsbG8sIFdvcmxkIQ==.

    Unicode kezelés:

    A btoa() függvény alapértelmezetten nem támogatja a Unicode karaktereket, mivel azok nem ASCII karakterek. Ha Unicode karakterekkel dolgozol, előbb megfelelően kell őket átalakítani.

    Unicode karakterek kódolásához:

    function utf8_to_b64(str) {
        return btoa(unescape(encodeURIComponent(str)));
    }
     
    let unicodeText = "Üzenet";
    let encodedUnicodeText = utf8_to_b64(unicodeText);
    console.log(encodedUnicodeText); // "w5Z6ZW5ldA=="

    atob() Függvény – Dekódolás

    Az atob() függvény a Base64 formátumban kódolt szöveget visszaalakítja az eredeti formátumba.

    Szintaxis:

    let decodedData = atob(base64String);

    Példa:

    let encodedText = "SGVsbG8sIFdvcmxkIQ==";
    let decodedText = atob(encodedText);
    console.log(decodedText); // "Hello, World!"
    • Magyarázat: A Base64 formátumban kódolt szöveget visszaalakítjuk az eredeti "Hello, World!" szöveggé.

    Unicode kezelés:

    Ha az eredeti szöveg Unicode karaktereket tartalmaz, az atob() alapértelmezetten nem tudja visszaalakítani azokat helyesen. Ebben az esetben az alábbi módon kell eljárni:

    Unicode karakterek dekódolásához:

    function b64_to_utf8(str) {
        return decodeURIComponent(escape(atob(str)));
    }
     
    let encodedUnicodeText = "w5Z6ZW5ldA==";
    let decodedUnicodeText = b64_to_utf8(encodedUnicodeText);
    console.log(decodedUnicodeText); // "Üzenet"

    Base64 használati esetek

    1.     Adatok biztonságos továbbítása: Base64 kódolást gyakran használnak e-mailben vagy URL-ben történő adatátvitelhez, mivel ezek a protokollok nem tudnak kezelni bináris adatokat.

    2.     Képek és fájlok beágyazása: HTML oldalon képeket és más fájlokat is Base64 formátumban tárolhatunk és közvetlenül beágyazhatunk az oldalba, így nem kell külön fájlokat külső forrásból letölteni.

    Példa egy Base64-kódolt kép megjelenítésére:

    <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." alt="Base64 Image">

    3.     Alapvető titkosítás: Bár nem biztonságos titkosítási módszer, a Base64-t egyszerű adatvédelmi megoldásokhoz is használják. Fontos azonban megjegyezni, hogy könnyen visszafejthető, tehát nem alkalmas érzékeny adatok védelmére.

    Összegzés

    • btoa(): A karakterlánc Base64 formátumba való kódolására szolgál, de csak ASCII karaktereket támogat.
    • atob(): A Base64 formátum visszakódolására használjuk, és szintén csak ASCII karaktereket támogat.

    Ha Unicode karakterekkel dolgozol, akkor szükséges az átalakítás a kódolás és dekódolás előtt/után.

    Ha bármi hasonlóra lelne valaki, ne tartsátok magatokban, osszátok meg velünk. :-)

    12 B - Űrlapfeldolgozás -> email cím ellenőrzése javascripttel

    Űrlap létrehozásakor, amikor e-mail címet kérünk be érdemes az <input type="email"> elem-et használni, hiszen ez is végez némi alapvető ellenőrzést a böngészőben, amikor az űrlapot elküldjük. Az alapvető ellenőrzés alatt azt értem, hogy azt vizsgálja, az email cím tartalmazza-e a @ karaktert, és utána van-e valamilyen domain név. Nem ellenőrzi azonban a domain végződés hosszát (mint pl. a .com vagy .org), sem a felhasználónév bonyolultságát. Tehát az olyan egyszerű címeket is elfogadhatja, mint például user@domain (bár a valóságban ez egy érvénytelen email cím lenne).

    Ha az űrlapot próbálják elküldeni érvénytelen email cím formátummal, a böngésző automatikusan egy figyelmeztetést jelenít meg, általában egy felugró üzenet formájában (pl. "Kérjük, adjon meg egy érvényes email címet"). Ez a figyelmeztetés a böngésző nyelvének megfelelően jelenik meg, tehát automatikusan lokalizált üzeneteket kapunk.

    Az olyan HTML5 attribútumok, mint a required, szintén működnek az email mezőknél. Ha hozzáadod ezt az attribútumot, akkor a böngésző nem engedi az űrlap beküldését, ha az email mező üres vagy nem megfelelő formátumú.

    Az olyan attribútumok, mint a pattern és a maxlength, további ellenőrzéseket tesznek lehetővé, ha a beépített validáció nem elegendő.

    Az <input type="email"> használata különösen hasznos mobil eszközökön, mivel sok mobilböngésző automatikusan egy olyan virtuális billentyűzetet jelenít meg, amely tartalmazza a @ és a pont karaktert, hogy megkönnyítse az email cím bevitelét.

    Mit nem ellenőriz a böngésző:

    • A böngésző nem ellenőrzi, hogy az email cím ténylegesen létezik-e, vagy hogy az adott domain valódi email szolgáltatást biztosít-e.
    • A szabványos email címek egyéb speciális karaktereit sem feltétlenül ellenőrzi szigorúan, tehát például olyan címek, mint "user+test@domain.com", érvényesnek tekinthetők.

    Miért hasznos a JavaScriptes ellenőrzés?

    Bár a böngésző alapvető ellenőrzést végez, a JavaScriptes validációval pontosabb és testreszabottabb ellenőrzéseket végezhetsz, például:

    • Korlátozhatod az email címeket bizonyos domainre (pl. csak .com végződések engedélyezése).
    • Testreszabhatod a hibaüzeneteket, hogy jobban illeszkedjenek az oldal stílusához.
    • Bonyolultabb mintákat is alkalmazhatsz, ha szükséges (pl. olyan speciális email címek, amelyeket a böngésző nem kezel jól).
    Az <input type="email"> használata praktikus, mert alapvető validációt nyújt a böngésző szintjén, de ha összetettebb szabályokat szeretnél alkalmazni, akkor érdemes JavaScript alapú validációt is hozzáadni a pontosabb ellenőrzés érdekében, mint amit itt a példában láthatsz:

    A let emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/; sor egy reguláris kifejezés (regex), amelyet arra használunk, hogy egy email cím formátumát ellenőrizzük. Lássuk részletesen, mit jelent ez a kifejezés:

    1. ^: A kifejezés elején lévő ^ karakter azt jelenti, hogy a minta az adott sor elejéről kezdődik (tehát nem lehet más karakter az elején).

    2. [a-zA-Z0-9._-]+:

      • [a-zA-Z0-9._-]: Ez egy karakterkészlet, amely azt jelzi, hogy az email cím első része (a @ előtti rész) tartalmazhat kis- és nagybetűket (a-z és A-Z), számokat (0-9), valamint a pontot (.), aláhúzást (_), és kötőjelet (-).
      • +: A plusz jel azt jelenti, hogy az előző karakterkészletből legalább egy, de akár több karakter is szerepelhet, tehát az email címnek mindenképpen tartalmaznia kell legalább egy ilyen karaktert.
    3. @: Ez a karakter az email cím kötelező része, amely elválasztja a felhasználónevét és a domain nevet (pl. user@example.com).

    4. [a-zA-Z0-9.-]+:

      • [a-zA-Z0-9.-]: A domain név része a @ utáni rész. Tartalmazhat kis- és nagybetűket, számokat, pontot (.) és kötőjelet (-).
      • +: Ismét azt jelzi, hogy legalább egy karakternek szerepelnie kell a megadott karakterekből (a domain név részben).
    5. \.: A \. egy speciális karaktert jelöl, itt konkrétan a pontot (.), mivel a reguláris kifejezésben a pont önmagában bármely karaktert jelölne. A \ jel használatával szó szerint a pontot keressük.

    6. [a-zA-Z]{2,6}:

      • [a-zA-Z]: A domain végződése csak betűket tartalmazhat (kis- és nagybetűk is elfogadhatók).
      • {2,6}: Ez azt jelenti, hogy a betűk száma minimum 2, maximum 6 lehet, vagyis olyan végződéseket keresünk, mint .com, .hu, .net, .info, stb.
    7. $: A dollárjel azt jelzi, hogy a minta a sor végére ér (nincs más karakter a végén).

    Összefoglalva:

    Ez a reguláris kifejezés egy email címet keres, amely megfelel a következő mintának:

    • Tartalmaz kis- és nagybetűket, számokat, pontot, aláhúzást vagy kötőjelet a @ előtti részben.
    • A @ után következik egy domain név, amely kis- és nagybetűket, számokat, pontot és kötőjelet tartalmazhat.
    • A domain név egy pont után egy 2-6 karakter hosszú végződéssel (például .com vagy .hu) zárul.
    Az így ellenőrzött email-t test() metódussal ellenőrizhetjük.
    pl. : regex.test(string)
  • regex: Ez a reguláris kifejezés, amit létrehoztál (pl. /^[a-zA-Z]+$/).
  • string: Az a szöveg, amit meg akarsz vizsgálni, hogy megfelel-e a reguláris kifejezésnek.

    Visszatérési érték:

    A test() metódus egy logikai értékkel tér vissza:

    • true: Ha a reguláris kifejezés illeszkedik a megadott sztringre.
    • false: Ha a reguláris kifejezés nem illeszkedik a megadott sztringre.
  • Példa:

    let emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/
    let email = "teszt@example.com"
      if (emailPattern.test(email)) { 
               console.log("Érvényes email cím."); 
        } else
              console.log("Érvénytelen email cím."); 
        }

  • Ebben a példában a test() metódus azt ellenőrzi, hogy a email változó értéke megfelel-e az emailPattern reguláris kifejezésnek.
  • Ha az email cím formátuma megfelelő, akkor a test() true-t ad vissza, és megjelenik a "Érvényes email cím." üzenet.
  • Ha az email cím nem felel meg a mintának, akkor false lesz az eredmény, és a "Érvénytelen email cím." üzenet jelenik meg.
  • 2024. október 4., péntek

    12 B - web javascript ismétlő feladat

     Készítsd el az alábbi feladatot: 

    Működése:

    1. A felhasználó kiválaszt egy úti célt a legördülő menüből (Párizs, New York, Tokió).
    2. Kiválasztja, hogy kér-e biztosítást.
    3. Amikor a felhasználó rákattint a "Számold ki a végösszeget" gombra, a program kiírja az utazás teljes költségét a biztosítással együtt (ha kérte azt).

    Segítség a megoldáshoz:

    1. A felhasználó egy HTML <select> elemből választhat 3 különböző úti cél közül.
    2. A választott úti cél alapján beolvassuk az árát.
    3. A megoldáshoz írj egy függvényt, amelyet kattintásra hívunk meg.

    Példa:

    • Úti célok:

      • Párizs: 1000$
      • New York: 1500$
      • Tokió: 2000$
    • Biztosítás: 100$


    2024. október 1., kedd

    12B IKT - Készítsétek el egy állateledeles weboldalát CSS GRID használatával.

    Az oldal létrehozásához szemantikus elemeket használj.

    Ügyel arra, hogy az oldal reszponzív legyen, tehát 3 különböző méretre tervezd.

    A mobilos nézetben 1 hasábban jelenlen meg minden.

    A tabletes nézetben 2 hasábban.

    Legyen menüje a weboldalnak, legalább 3 oldalt tartalmazzon. (Főoldal, statisztikák, rendelések állapota, stb. )

    Normál képernyős nézetben viszont 3 hasábnak lennie kell. (Egyik oldalon lehet pl reklám sáv, Google hirdetéseknek.

    A fő tartalomban legyenek címsorok, logikusan elrendezve, (cím, alcím), bekezdések.

    Legyen lábléce az oldalaknak, elérhetőségekkel.

    Az egyik oldalon legyen táblázat is, ami reszponzív legyen. (w3school-on találsz rá jó megoldást)

    Valahol alkalmazz benne számozott és számozatlan felsorolást is. A számozatlan felsorolás esetében alkalmazz valamilyen egyedi lista jelet. (pl lehet futár adatok, rendelési adatok, stb.)

    Legyenek az oldalon képek, ábrák, statisztikai ábrák, kimutatások, rendelési státuszok.

    Példa:


    tabletes nézet:
     

    mobilos nézet:
     

    A projekt elkészítésének része a dokumentáció elkészítése. A feladat mappában találtok egy „záródolgozat formátum” elnevezésű dokumentumot. A csapat egyik tagja folyamatosan vezesse a megadott pontok szerint. Címlapra kerülhet majd egy képernyő fotó a weboldal kezdő oldaláról, a készítők neve a projekt címe. Bevezetőben a csapat tagjai, ki hogyan vett részt a munkában. A felhasználói dokumentációban mutasd be a weboldalt egy laikus felhasználónak, pl. mit láthat az oldalon, hova kattinthat. A fejlesztői dokumentációban felhasznált technológiák, pl Html, Css, Js, Felxbox, Css grid stb. Kódolás folyamata, azoknak a kód részleteknek a bemutatása, amit kiemelnél. A tervezést készítsétek el figma tervezővel. Összefoglalásban értékeld a közös munkát, és a tovább fejlesztési lehetőségeket. A forrásoknál folyamatosan gyűjtsétek azokat az oldalakat, ahol megoldást kerestetek. Törekedjetek egy olyan igényes munkára, mintha valóban egy meglévő üzlet tulajdonosa rendelte volna tőletek a weboldalt. A kész munkákat a táblánál kell bemutatni a csapatoknak 10 percben.

     

    12B 8. ES6 szintaxis: Nyílfüggvények, let és const változók, template literálok.

     Az ES6 (ECMAScript 6) számos újítást hozott a JavaScript nyelvbe, amelyek közül kiemelkednek a nyílfüggvények, a let és const változók, valamint a template literálok. Ezek az újítások könnyebbé, biztonságosabbá és olvashatóbbá teszik a kód írását. Lássuk részletesebben ezeket:

    1. Nyílfüggvények (Arrow Functions)

    A nyílfüggvények rövidebb és olvashatóbb módját kínálják a függvények deklarálásának. A hagyományos function szintaxis helyett egy nyilat (=>) használunk. Előnyük továbbá, hogy az általuk használt this értéke nem változik, mindig az adott kontextusra vonatkozik.

    Szintaxis:

    // Hagyományos függvény

    function add(a, b) {

      return a + b;

    }

    // Nyílfüggvény

    const add = (a, b) => a + b;

    Jellemzők:

    • Egyszerű szintaxis egyetlen kifejezés esetén (nem kell return és kapcsos zárójel).
    • Több soros kifejezés esetén a függvénytestet kapcsos zárójelek közé kell tenni, és expliciten kell használni a return kulcsszót:

    const multiply = (a, b) => {

      const result = a * b;

      return result;

    };

    Ha a függvénynek egyetlen paramétere van, akkor a zárójeleket is elhagyhatjuk:

    const square = x => x * x;

    this viselkedése:

    A nyílfüggvények nem definiálnak saját this értéket, hanem öröklik azt a környezetből, ahol létrehozták őket. Ez hasznos lehet például aszinkron kódoknál, ahol a this értéke változhat a hagyományos függvények esetén.

    2. let és const változók

    Az ES6-ban a változók definiálására két új kulcsszót vezettek be: let és const. Ezek a régi var kulcsszót váltják fel, és számos előnnyel járnak, különösen a hatókör és újraértelmezés kezelésében.

    let

    A let lokális blokk szintű hatókörrel rendelkezik, vagyis csak abban a blokkban (kapcsos zárójelek között) érhető el, ahol definiálták. Ez megakadályozza, hogy a kód különböző részeiben véletlenül újraértelmezzünk egy változót, amely hibákhoz vezethetne.

    Példa:

    let x = 10;

    if (x > 5) {

      let y = 20; // Ez a változó csak az if blokkban létezik

      console.log(y); // 20

    }

    console.log(y); // Hibát dob, mert y nincs a blokkon kívül

    const

    A const a konstansok deklarálására szolgál, vagyis olyan változókra, amelyek értéke nem változtatható meg az inicializálás után. Fontos megjegyezni, hogy ez csak a primitív értékekre igaz (szám, string, boolean), objektumok vagy tömbök esetén az objektum tulajdonságai vagy a tömb elemei módosíthatók, de maga az objektum nem.

    Példa:

    const pi = 3.14159;

    pi = 3; // Hibát dob, mert pi értéke nem változtatható

    const arr = [1, 2, 3];

    arr.push(4); // Ez működik, mert az arr elemei módosíthatók

    3. Template literálok (Template Literals)

    A template literálok (más néven template stringek) egyszerűsítik a szövegek kezelését és összefűzését. Az újfajta idézőjelek (`) segítségével változók és kifejezések közvetlenül beilleszthetők a szövegbe a ${} szintaxis segítségével.

    Példa:

    const name = 'John';

    const age = 30;

    const message = `My name is ${name} and I am ${age} years old.`;

    console.log(message); // My name is John and I am 30 years old.

    Több soros stringek:

    A template literálokkal több soros szövegeket is könnyedén lehet kezelni anélkül, hogy külön karaktereket kellene használni az új sorokhoz.

     

    const multiLineText = `

    This is a string

    that spans across

    multiple lines.

    `;

    console.log(multiLineText);

    Összegzés:

    • Nyílfüggvények: rövidebb, egyszerűbb függvénydefiníciók, amelyek öröklik a környezetük this értékét.
    • let és const: blokkszintű hatókört biztosítanak, így biztonságosabbak, mint a var. A const változókat nem lehet újraértékelni, míg a let változók változtathatóak.
    • Template literálok: dinamikus szövegek létrehozására használhatók, változók és kifejezések közvetlen beszúrásával, valamint több soros szövegek kezelésére.

    Ezek az ES6 szintaxisbeli újítások jelentősen javítják a JavaScript kódolási élményt és hatékonyságot, ezért elengedhetetlen ismerni őket modern JavaScript projektek során.

    12 B 6. Függvények típusai: Névtelen függvények, callback függvények, és függvények mint objektumok.

    1. Névtelen függvények (Anonymous Functions)

    Névtelen függvények olyan függvények, amelyeknek nincs nevük. Általában akkor használjuk őket, amikor nem szükséges egy függvényt több helyen újrahasználni. Gyakran találkozhatunk velük helyi változókhoz rendelve vagy callback függvényként átadva.

    Példa:

    const add = function(a, b) {
      return a + b;
    };
    console.log(add(5, 3));  // 8

    Ebben a példában egy névtelen függvényt rendeltünk az add változóhoz, majd meghívtuk a függvényt a változón keresztül. A névtelen függvények nem rendelkeznek saját nevükkel, ezért csak azon a ponton érhetők el, ahol deklaráltuk őket.

    Az arrow function (nyíl függvény) a JavaScript ES6 verziójával került be a nyelvbe, és a függvények írásának egy rövidebb, tisztább szintaxisú alternatíváját kínálja. Az arrow function nemcsak a szintaxisában tér el a hagyományos függvényektől, hanem a viselkedésében is, különösen ami a this kontextust illeti.

    Arrow Function fő jellemzői

    1.     Rövidebb szintaxis Az arrow function szintaxisa tömörebb és könnyebben olvasható, különösen akkor, ha csak egy kifejezést kell visszaadni.

    o   Hagyományos függvény:

    const multiply = function(a, b) {
      return a * b;
    };

    o   Arrow function:

    const multiply = (a, b) => a * b;

    Az arrow function esetében a kifejezés automatikusan visszatérési értékként (return) kerül kiértékelésre, ha nincs kifejtve a függvénytörzs, és nincs szükség explicit return utasításra.

    2.     Kompaktabb egyetlen paraméter esetén Ha a függvény csak egy paramétert vesz át, akkor a zárójelek elhagyhatók.

      • Példa egy paraméteres arrow function-re:
    const square = x => x * x;
    console.log(square(5));  // 25

    3.     Implicit return Ha a függvénytörzs egy egyszerű kifejezésből áll, nem szükséges a függvénytestet (görbe zárójeleket) használni, és a return is implicit (automatikus).

      • Példa implicit return használatára:
    const add = (a, b) => a + b;
    console.log(add(3, 7));  // 10

    4.     Ha több utasítás van a függvénytörzsben, vagy explicit logikát kell alkalmazni, akkor szükségesek a görbe zárójelek, és ebben az esetben a return utasítás már nem lesz implicit.

      • Példa több utasításos arrow function-re:
    const addAndLog = (a, b) => {
      console.log(`Adding ${a} and ${b}`);
      return a + b;
    };
     
    console.log(addAndLog(2, 5));  // "Adding 2 and 5", majd 7

    5.     Nincs saját this kontextus Az arrow function egyik legnagyobb különbsége a hagyományos függvényekhez képest, hogy nem köt saját this kontextust. A hagyományos függvényekben a this a függvény meghívásának kontextusától függően változik, de az arrow function a lexikális környezetéből örökli a this-t.

    Ez azt jelenti, hogy az arrow function mindig azt a this-t fogja használni, ami a függvényt körülvevő kontextusban volt érvényes. Ez különösen hasznos lehet például akkor, amikor objektumokon belül hívunk meg függvényeket, vagy amikor egy callback függvényben szeretnénk használni a this-t.

    o   Példa: Hagyományos függvény és this viselkedése:

    function Person() {
      this.age = 0;
     
      setInterval(function() {
        this.age++;
        console.log(this.age);
      }, 1000);
    }
     
    const p = new Person();
    // A `this` a setInterval-ben a globális objektumra fog mutatni (böngészőben: `window`), nem pedig a Person példányára.
        • Megoldás arrow function-nel:
    function Person() {
      this.age = 0;
     
      setInterval(() => {
        this.age++;
        console.log(this.age);
      }, 1000);
    }
     
    const p = new Person();
    // A `this` most már a Person példányára mutat, így az `age` helyesen növekszik.

    Mivel az arrow function nem rendelkezik saját this-szel, hanem a külső lexikális környezetből veszi át, ez megoldja a this kontextusproblémáját, amely gyakran előfordul aszinkron kódokban.

    6.     Nem használható konstruktor függvényként A hagyományos függvényekkel ellentétben az arrow function-t nem lehet konstruktor függvényként használni. Ez azt jelenti, hogy nem lehet őket new operátorral példányosítani.

      • Példa:
    const MyFunction = () => {};
    const instance = new MyFunction();  // Hiba: Arrow function nem használható konstruktor függvényként

    7.     Nincs arguments objektum A hagyományos függvényekhez hasonlóan az arrow function nem rendelkezik saját arguments objektummal. Ha hozzáférésre van szükség a függvény argumentumaihoz, akkor a rest parameters (...args) használata ajánlott.

      • Példa arguments helyett rest parameters használatával:
    const sumAll = (...args) => args.reduce((sum, num) => sum + num, 0);
     
    console.log(sumAll(1, 2, 3, 4));  // 10

    Összegzés

    Az arrow function-ek nagyban egyszerűsítik a JavaScript kódot, különösen akkor, ha rövid és egyszerű függvényeket kell írni. Azáltal, hogy nem köt saját this-t, könnyebbé válik az aszinkron kódok kezelése és a callback függvények kezelése. Fontos azonban megérteni, hogy az arrow function nem helyettesíti teljesen a hagyományos függvényeket, mivel bizonyos esetekben (pl. konstruktor függvények írásakor) a hagyományos függvények továbbra is szükségesek.

    2. Callback függvények

    A callback függvények olyan függvények, amelyeket egy másik függvény paraméterként kap meg, és gyakran akkor hívják meg őket, amikor egy adott esemény megtörténik, vagy amikor egy művelet befejeződik. A JavaScript aszinkron természetéből adódóan a callback függvények rendkívül fontosak például API hívások, fájlműveletek vagy egyéb időigényes feladatok kezelése során.

    Példa callback függvényre:

    function processData(data, callback) {
      console.log("Processing data...");
      callback(data);
    }
     
    function logData(data) {
      console.log("Data:", data);
    }
     
    processData({ name: "John", age: 25 }, logData);

    Ebben a példában a logData függvényt adtuk át a processData függvénynek callbackként. A processData függvény az adatfeldolgozás után meghívja a callbacket, és átadja neki az adatokat.

    Callback függvények aszinkron műveleteknél:

    Az aszinkron műveleteknél a callback-ek különösen hasznosak. Például egy adatbázis-lekérdezés vagy fájl beolvasása után callbacket használhatunk az adatok feldolgozására.

    Aszinkron példa:

    setTimeout(() => {
      console.log("This runs after 2 seconds");
    }, 2000);

    Itt a setTimeout egy aszinkron funkció, amely vár 2 másodpercet, mielőtt meghívja a callback függvényt.

    3. Függvények mint objektumok

    A JavaScriptben a függvények speciális objektumok. Ez azt jelenti, hogy ugyanúgy, ahogyan egy objektumnak lehetnek tulajdonságai és metódusai, egy függvénynek is lehetnek ilyen tulajdonságai. Mivel a függvények objektumok, átadhatók más változóknak, tárolhatók tömbökben, és visszatérhetnek más függvényekből is.

    Példa: Függvények tulajdonságai

    function greet() {
      console.log("Hello!");
    }
     
    greet.language = "English";
    console.log(greet.language);  // English

    Itt a greet egy függvény, amelyhez hozzáadtunk egy language tulajdonságot. Ez az egyedülálló tulajdonság lehetővé teszi, hogy függvényeket dinamikusan bővítsünk.

    Függvények mint értékek:

    A függvények átadhatók más függvényeknek paraméterként, vissza is adhatók függvényekből, vagy akár tárolhatók tömbökben vagy objektumokban is.

    Példa: Függvény visszatérése egy másik függvényből

    function createMultiplier(multiplier) {
      return function(num) {
        return num * multiplier;
      };
    }
    const double = createMultiplier(2);
    console.log(double(5));  // 10

    Ebben a példában a createMultiplier egy függvényt ad vissza, amely a megadott számmal szorozza meg a paraméterét. A függvények ilyen módon való kezelése rendkívül rugalmas lehetőségeket biztosít a JavaScriptben.

    Összefoglalás

    • Névtelen függvények nem rendelkeznek névvel, gyakran egyszeri használatra vannak szánva.
    • Callback függvények másik függvénynek átadott függvények, amelyek gyakran aszinkron események vagy műveletek után hívódnak meg.
    • Függvények mint objektumok azt jelentik, hogy a függvények is rendelkezhetnek tulajdonságokkal és metódusokkal, illetve önálló értékként kezelhetők.

    Ez a három függvénytípus különböző helyzetekben és feladatokban rendkívül hasznos lehet a JavaScript fejlesztés során.

    PIQPACC keretrendszer azaz ellenőrző lista arra, hogyan használjuk az AI-t kritikus gondolkodással

      P – Purpose / Cél Mit akarok elérni? Pontosan mire kérem az AI-t, és mire nem? I – Information / Információ Milyen adatokra, forrásokra...