A Java Programozás Alapjai és a CDI Bevezetése Példákkal
A Java programnyelv már lassan 30 éve a legnépszerűbb programozási nyelv a világon. Ennek oka, hogy egy objektumorientált, több platformon is használható és értelmezhető kódot készíthetünk a Java programozás segítségével. Cikkünkben ismertetjük a legfontosabb jellemzőket, a Java alapjait, a fejlesztőkörnyezet beállítását, valamint mélyebben is belemerülünk a Java EE világába, azon belül is a CDI (Contexts and Dependency Injection) rejtelmeibe.
Mi az a Java Programozási Nyelv és Mire Használják?
A Java programnyelv egy általános célú, objektumorientált programozási nyelv, amelyet eredetileg a Sun Microsystems fejlesztett ki az 1990-es években. A Java a JVM (Java Virtual Machine) segítségével működik, amely virtuális környezetet biztosít a Java programok futtatásához.
Mire használják a Java programozást? A Java egy univerzális programozási nyelv. Népszerűsége továbbra is az egyik legnagyobb erőssége. Számos területen alkalmazzák, például:
- Webalkalmazások fejlesztése: A Java nyelv és a hozzá tartozó keretrendszerek, például a Spring Framework segítségével lehetőség van webfejlesztésre.
- Asztali alkalmazások készítése: A JavaFX keretrendszer lehetővé teszi asztali alkalmazások fejlesztését Java programnyelven.
- Mobil applikációk fejlesztése: A Java programozás alapja az Android alkalmazások fejlesztésének.
- Játékfejlesztés: Néhány játékfejlesztő használja a Java programnyelvet játékok készítéséhez, különösen olyan egyszerűbb játékokhoz, amelyek nem igényelnek nagy teljesítményű grafikát.
- Adatbázis-kezelés.
A Java egyben többplatform is, azaz különböző alkalmazások és programok létrehozására használható. Skálázható, és számos fejlesztéshez használható, mint például Android alkalmazások, Java webalkalmazások, szoftvereszközök, kiszolgálóalkalmazások a pénzügyi szolgáltatási iparban, kereskedelmi alkalmazás, beágyazott, Space, Big Data technológiák, nagyfrekvenciás kereskedési terület, tudományos alkalmazások stb.
A Java Programozás Működése Rövidem
A Java programozás működése röviden a következő lépésekből áll:
- Kódolás: Java programnyelven írja meg a programot. A Java egy strukturált, objektumorientált nyelv, amelynek szintaxisát könnyen megértheti, különösen ha már ismer más programozási nyelveket.
- Fordítás: A Java forráskódját egy fordítóprogrammal (javac) fordítják le Java bájtkódra, ami egy köztes nyelv.
- Java Virtual Machine (JVM): A Java bájtkódot a Java Virtuális Gép (JVM) értelmezi és futtatja.
- Futtatás: Miután a Java bájtkódot a JVM értelmezte, a program fut.
- Hibakeresés és javítás: Amennyiben hibákat tapasztal a programban, vissza kell térnie a forráskódhoz, hogy kijavítsa azokat.
Ez a folyamat lehetővé teszi a Java programok platformfüggetlen futtatását, ami azt jelenti, hogy ugyanazt a Java alkalmazást lehet futtatni különböző operációs rendszereken anélkül, hogy a forráskódot módosítani kellene.
Java Alapok Kezdőknek: Hogyan Kezdjünk Hozzá?
A Java programozás elsajátítása szórakoztató és egyszerű lehet, ha csak ismeri és alkalmazza a megfelelő módszereket. Íme néhány lépés, hogyan kezdjen hozzá:
- Telepítse a Java Development Kit (JDK) szoftvercsomagot: A JDK tartalmazza mindazt, amire szüksége van a Java programok írásához, fordításához és futtatásához. Ez tartalmazza a Java alkalmazások futtatásához, valamint azok készítéséhez, fordításához szükséges programozói eszközöket is (tehát a JRE-t nem kell külön letölteni, a JDK tartalmazza).
- Keressen egy Java fejlesztőkörnyezetet (IDE): Bár lehet Java programokat írni egyszerű szövegszerkesztőkkel is, egy speciális fejlesztőkörnyezet (pl. IntelliJ IDEA, Eclipse vagy NetBeans) használata sokkal hatékonyabb lehet.
- Tanulja meg a Java alapjait: Ismerkedjen meg a Java nyelv alapjaival, például a változókkal, adattípusokkal, vezérlőutasításokkal (pl. if-else, switch), ciklusokkal (pl. for, while), függvényekkel és objektumokkal. Fontos, hogy kulcsfontosságú az alapoktól kezdeni. Itt vannak az alapok, amelyekkel érdemes kezdeni:
- Java szintaxis: Ez a Java-ban használt szabályok, például kulcsszavak, operátorok, ciklusok, változók és osztályok halmaza. Meg kell tanulnia őket, mit jelentenek és hogyan működnek.
- Objektum-orientált programozás (OOP): Nagyon fontos, hogy ne csak tanulmányozza ezt a témát és gyakorolja is. Néhány altémája az osztályöröklés, az adatok absztrakciója és az adatok beágyazása.
- Java gyűjtemények: A Java interfészek és osztályok készletét kínálja a gyűjtemény reprezentálására. A Java teljes megértéséhez ismernie kell ezeket a gyűjteményeket.
- Java kivételek: A Java-kivételek sokkal könnyebbé teszik a hibaelhárítást. Ezek a kivételek a „java.lang.Exception” kód alatt találhatók. Ez az egyik alapvető dolog, amit kezdőként tudnia kell.
- Bemeneti/kimeneti adatfolyamok: Ezek azok a műveletek, amelyeket a Java befolyásol. A „System.out.println()” jelentésének ismerete segít jobban megismerni a témát.
- Algoritmusok és rejtvények: Itt megismerheti a válogatási és keresési módszereket.
- Java Multithreading: Ez az egyik legnehezebben megtanulható dolog a Java programozásban kezdőknek, de a Java nyelv egyik leghasznosabb funkciója, amely lehetővé teszi több szál (kis részfolyamatok) egyidejű feldolgozását.
- Gyakoroljon a kis példaprogramok írásával: Írjon egyszerű Java programokat, például olyanokat, amelyek kiírják a „Hello, World!” üzenetet, vagy kiszámolják két szám összegét. Vegyük azt a nagyon egyszerű kis Java programot, amiben kiírjuk a parancssori argumentumait a programnak.
- Kísérletezzen az API-kkal és keretrendszerekkel: Tanulmányozza a Java API-kat (Application Programming Interface), és ismerje meg a gyakran használt Java keretrendszereket, például a Java Standard Edition (Java SE) API-jait.
- Olvassa el a Java dokumentációt és tanuljon másoktól: A hivatalos Java dokumentáció rendkívül hasznos forrás lehet a Java nyelv és API-k mélyebb megértéséhez.
Fejlesztőkörnyezet Beállítása és Használata (IntelliJ IDEA Példa)
Az IntelliJ IDEA indításakor a Welcome ablak jelenik meg. Itt kezdetben néhány beállítást testre szabhatunk (pl. világos / sötét téma), illetve a későbbiekben itt láthatjuk a korábban megnyitott projektjeinket. Projekt létrehozásakor választhatunk sok sablon közül, de létrehozhatunk egyszerű Java projektet is. Ezután a Next gombra kell párszor kattintanunk, majd megadhatjuk a projekt nevét, illetve a lokációt, hogy hova mentse a projektet. A projekt létrehozása után a bal oldalon láthatjuk a projekt struktúráját.
Új fájl létrehozásához kattintsunk jobb klikkel az src mappára, majd new -> Java class. Ide írjuk be az osztály nevét. Ha szeretnénk futtatni a programunkat, akkor először meg kell keresnünk a futtatható osztályunkat (amiben van main függvény), majd a bal oldali menüben jobb klikk az adott osztályra, és ott válasszuk ki a run opciót. Ekkor az alsó sávban megjelenik egy Run menüpont is, ahol a futtatás eredményét láthatjuk. Ha a felhasználótól kérünk be adatot, akkor azt is itt tudjuk megadni, ezeket zöld színnel jelzi a környezet. Ha már egyszer lefuttattuk a programunkat, akkor a rendszer létrehozott hozzá egy konfigurációt, ezt a jobb felső sarokban látjuk. Ha rákattintunk, akkor tudjuk szerkeszteni is az "Edit configuration" opcióval. Itt argumentumokat is megadhatunk a programnak (a program arguments mezőbe beírva).
Hibakezelés és Hibajelzések
A rendszer a program írása során folyamatosan ellenőrzi a programkódunkat, és jelzi, ha hiba található benne.
Karakterek és adattípusok Javában
- Fordítási hiba: Ha ilyen van, akkor a programunkat nem lehet lefordítani.
- Warning: Ha ilyen van, akkor a programunk fordítható és futtatható, de nagy valószínűséggel rosszul működik, a javításuk mindenképp megfontolandó. Létezik "weak warning" is, amely általában kódminőséggel kapcsolatos problémákra figyelmeztet.
- Typo: Ha valamit elgépelünk, akkor erre szintén figyelmeztet.
A hibákat jelzi a kód színezésével is, illetve a jobb oldali görgetősávban is. Ezekre javításokat is tud javasolni az esetek nagy részében. Ehhez a kurzorral menjünk az adott hibás kódrészletre, majd nyomjuk meg az Alt+Enter billentyű kombinációt.
Például, egy egyszerű program a következőképpen írhat ki üzenetet:
System.out.println("Hello! System.out.println("Hello " + nev + "!");
A Java programozási alapok elsajátításakor érdemes egyszerű feladatokkal gyakorolni. Például, írhat egy olyan futtatható Java osztályt, amely a parancssori argumentumokat fordított sorrendben írja ki, ráadásul mindet visszafelé! Kommentezze a kódot javadoc kommentekkel, és generálja ki a dokumentációt! A függvények törzsét kell elkészíteni!
- Készítsen egy statikus, lustalkodas nevű függvényt. A függvény két paramétert kap: azt, hogy hétköznap van-e, és azt, hogy vakáció van-e.
- Készítsen egy statikus, utolsoSzamjegyEgyenloseg nevű függvényt. A függvény két számot vár.
- Készítsen egy statikus, utolsoSzamjegyEgyenlosegN nevű függvényt. A függvény három számot vár (a, b, n). Térjen vissza igazzal, ha az első két szám utolsó n számjegyei megegyeznek (az utolsó 3.
- Készítsen egy statikus, honap nevű függvényt, ami egy számot vár. A függvény térjen vissza az adott hónappal szövegesen (ékezet nélkül), ha a megadott szám 1-12 között van.
- Készítsen egy statikus, primek nevű függvényt, ami egy számot vár.
Fejlesztői környezet beállítása
Hibakeresés (Debugging) a Java Alkalmazásokban
A legegyszerűbb lehetőségünk arra, hogy megfigyeljük a programunk működését futás közben, ha egyes sorokra breakpointot teszünk, majd lépdelve a végrehajtás menetén megpróbálunk rájönni, hogy mi is lehet a hiba, ami miatt a programunk nem jól működik. Alul a Debug fülön láthatjuk a program futásának aktuális állapotát. A bal oldalon látjuk, hogy éppen hol jár a programunk futása: most Macska osztály main függvényében vagyunk, a fájl 4. sorában. Ha egy adott függvényben vagyunk, amit más függvényből hívtunk, akkor itt a hívási hely is látszik. A jobb oldalon láthatjuk a változóink aktuális értékét, illetve ezeket módosítani is tudjuk (jobb kilkk). Vagy akár plusz kifejezéseket is hozzáadhatunk a + ikonra kattintva.
A breakpointokhoz feltétel is megadható, melynek hatására csak akkor fog megállni a futtatás az adott ponton, ha a feltétel igaz. Ilyen feltétel lehet pl. az, hogy "a > 10". Ha akarjuk, akár meg is változtathatjuk egyes változók értékét itt, ezzel is közelebb kerülve a hibás működéshez! A változók helyenkénti megváltoztatása persze nem minden esetben biztonságos megoldás, viszont például egy sokszor ismétlődő ciklus esetében a ciklusmag állandó végrehajtásától a hajunkat téphetjük. Újrafuttatva a debuggert az már csak akkor áll meg, amikor a ciklus feltétele a feltételünknek megfelelő.
Előfordulhat, hogy akkor szeretnénk megállítani a programunkat, ha abban valahol kivétel keletkezett. Ehhez kattintsunk a breakpointra jobb klikkel, majd válasszuk a "more" opciót. Itt a + ikonra kattintva válasszuk ki a "Java exception breakpoints" opciót, majd kiválaszthatjuk milyen kivételre szeretnénk megállni. Ezután ha futtatjuk a programunkat és ilyen típusú kivételt kapunk, a programunk futása az adott ponton megáll.
Bevezetés a Java EE-be és a CDI-be (Contexts and Dependency Injection)
A Java EE technológia manapság igencsak megosztó, de igenis van jelene. Egyrészt sok alkalmazás épül Java EE technológiára. A Java EE folyamatosan fejlődik, érdemes figyelemmel követni az újdonságokat. Az érték az üzleti tudásban és funkciókban van.
A CDI (Contexts and Dependency Injection) térnyerése a Java EE-ben kulcsfontosságú. Már a 2.0 verzióját tartalmazza. Az EJB-k esetén az EJB-ket a típusuk alapján kellett annotálni, pl. @Stateless. Ezekre a problémákra próbál megoldást találni a CDI. A CDI tehát a Java EE komponens modellje. Próbálja egységesíteni a komponensmodellt.
A CDI bevezetése a Java EE 6-tal történt meg, és azóta a nagyvállalati Java fejlesztés egyik alappillérévé vált. A CDI alapvetően a függőségi injektálásra (dependency injection) és a kontextuskezelésre fókuszál. A CDI-vel kezelt "beans" (komponensek) Scope-pal rendelkeznek, azaz definiált az élettartamuk (pl. kérés, munkamenet, alkalmazás). Különböző életciklushoz vagy egyébhez köthető eseményekre lehet reagálni.
Ahhoz, hogy átlássuk, hogy merre tart a fejlődés, kidolgozták a MicroProfile szabványt. Ez tartalmazza a Java EE szabványok egy részét, és lehetővé teszi Cloud Native nagyvállalati alkalmazások fejlesztését.
A CDI Gyakorlatban
Mit jelent mindez egy legacy Java EE alkalmazás esetén? Az mindenképp a CDI alapos megismerése és bevezetése, ahol csak lehet. Lehetőséget biztosít az EJB-k kiváltására is. Érdemes először egyszerű POJO-kban (Plain Old Java Objects) gondolkodni, és mindent azokban megvalósítani. Ebből természetesen a dependency injection a legfontosabb.
Ha feltétlen szükség van valami általuk nyújtott szolgáltatásra, amit a CDI nem tud (pl. ütemezés), akkor használhatunk EJB-ket. Az implementáció CDI interceptorokkal valósítható meg. A POJO-khoz vagy CDI beanekhez a constructor injekctiont javasolja a szakma.
Tesztelés CDI Alkalmazások Esetén
Amikor integrált teszteket írunk, hogy a komponensek megfelelően működnek-e együtt, előfordulhat, hogy az Arquillian eszközbe botlunk bele. Az Arquilliant legtöbbször ún. in-container tesztelésre használják, ahol az alkalmazást egy konténerbe (pl. alkalmazásszerverbe) telepítik, majd ott futtatják a teszteket. Az Arquilliannal micro-deploymentet hozhatunk létre, azaz csak a teszteléshez szükséges komponenseket telepítjük. Ahhoz, hogy az alkalmazásunkat deployolni tudjuk egy alkalmazásszerverre, csomagot, archiv-ot kell létrehoznunk.
A CDI tulajdonságokkal ruházza fel, pl. futtassuk a teszteket. Nincs tranzakciónk, így transaction managerre van szükség. A @Inject annotációval injektálja. Természetesen egy entitást kezel. Nézzük is a tesztesetet. Weldet hozzáadva, a Hibernate-nek van beregisztrálva, hogy ezen keresztül kérje le az adatbázis kapcsolatot. A JTA kezeli az adatbázis kapcsolat tranzakcióját innentől kezdve.
Fejlesztői környezet beállítása
Java Alkalmazások Üzembe Helyezése: Az EAR Archívum és Maven Modulok
Ahhoz, hogy az alkalmazásunkat deployolni tudjuk egy alkalmazásszerverre, csomagot, archiv-ot kell létrehoznunk. Az EAR az Enterprise Archive rövidítése, és ha olyan csomagot szeretnénk, ami tartalmaz jar fájlokat, EJB modulokat - ezek szintén jar fájlok -, és opcionálisan egy war (WEB archive) fájlt is, akkor mindezt egy EAR-ba csomagolva már deployolhatjuk is a szerverre, akár deployment descriptorokkal megfűszerezve.
Egy tipikus projektstruktúra Maven modulokkal a következőképpen épülhet fel:
- Létrehozunk egy maven modul-t, legyen a neve example-shared. Ez a modul fogja tartalmazni azokat az interfészeket, amelyeket a későbbi backend és frontend moduljaink használni fognak. Például JPA-entitások, szolgáltatások interfészei. Egyedüli függősége a javax.javaee-api:6.0 legyen, provided scope-ban. Ezzel fordítás időben rendelkezésünkre áll majd minden Java EE 6 API.
- A következő lépésben hozzunk létre egy example-backend nevű modult. A modul függősége az example-shared modul lesz, így rendelkezésre állnak a JPA-entitásaink és a szolgáltatásinterfészek. Ebben a modulban implementáljuk a szolgáltatásokat, amelyek például az entitásokon keresztül az adatbázissal kommunikálnak.
- Hozzon létre egy example-frontend modult, amelynek szintén az example-shared lesz a függősége.
Tegyük fel, hogy szeretnénk skálázhatóvá tenni az alkalmazásunk üzleti logikáját. Egyszerűen hangzik, de nem minden esetben az. Sok a lehetőség, de sok a buktató is.
A Modern Java Fejlesztés: Bevezetés a Spring Bootba
A Spring Boot a Spring keretrendszer egyik modulja, amely célja, hogy leegyszerűsítse a Spring alapú alkalmazások fejlesztését. A Spring Boot segítségével gyorsan létrehozhatunk működő alkalmazásokat minimális konfigurációval. A Spring Boot automatikusan kezeli a konfigurációkat, beépített szervert biztosít (pl. Tomcat, Jetty).
A Spring egy olyan nyílt forráskódú projekt, amely korszerűsített, moduláris megközelítést biztosít az alkalmazások Java használatával való létrehozásához. A Spring-projektek termékcsaládja 2003-ban indult a korai Java-fejlesztés összetettségére adott válaszként, és támogatást nyújt a Java-alkalmazások fejlesztéséhez.
Spring Boot Jellemzők és Előnyök
A Spring Boot néhány fő funkciója:
- Különálló alkalmazások: A Spring Boot segítségével olyan alkalmazásokat hozhat létre, amelyek nem kapcsolódnak egy adott platformhoz, és egy eszközön helyben futtathatók internetkapcsolat vagy más telepített szolgáltatások nélkül.
- Beágyazott kiszolgálók: A Spring Boot lehetővé teszi olyan kiszolgálók közvetlen beágyazását, mint amilyen például a Tomcat, a Jetty vagy az Undertow.
- Véleményezett megközelítés: A Spring Boot a véleményezett kiindulási függőségek megadásával leegyszerűsíti a buildek konfigurációját.
- Automatikus konfigurálás: A Spring Boot, amikor csak lehetséges, automatikusan konfigurálja a Springet és más külső kódtárakat.
- Éles üzemre kész funkciók: A Spring Boot olyan éles használatra kész funkciókat biztosít, mint amilyenek például a metrikák, az állapotellenőrzések és a külső konfiguráció.
A Spring Boot előnyei:
- Csökkenti a fejlesztési időt, és növeli a hatékonyságot: A Spring Boot jelentősen megkönnyíti a Spring-alapú alkalmazások Javával való fejlesztését.
- Csökkenti a sablonkódok, jegyzetek és XML-konfigurációk írásának szükségességét: A fejlesztőknek nem kell kódot létrehozniuk vagy XML-t konfigurálniuk.
- Fejlesztői és tesztelési eszközöket biztosít: A Spring Boot parancssori felületi (CLI-) eszközével és beágyazott HTTP-kiszolgálóival rendkívül egyszerűvé válik a Spring-alapú alkalmazások fejlesztéséhez/teszteléséhez szükséges környezetek kialakítása.
- Beépülő modulokat és eszközöket biztosít a fejlesztés megkönnyítéséhez: A Spring Boot beépülő modulokat biztosít a memórián belüli adatbázisokkal való munkához, továbbá más népszerű fejlesztésautomatizálási eszközöket is kínál, ilyen például az Apache Maven.
Spring és Spring Boot Összehasonlítás
A Spring-keretrendszer és a Spring Boot összehasonlítása az alábbi táblázatban látható:
| Jellemző | Spring-keretrendszer | Spring Boot |
|---|---|---|
| Mi ez? | Java-alapú, nyílt forráskódú webalkalmazás-keretrendszer. | A Spring-keretrendszerre épülő bővítmény vagy modul. |
| Mire szolgál? | Rugalmas, teljes mértékben konfigurálható, az előre összeállított kód eszközeit és kódtárait használó környezetet biztosít a testre szabott, lazán összekapcsolt webalkalmazások létrehozásához. | Lehetővé teszi olyan önálló Spring-alkalmazások létrehozását, amelyek azonnal futtathatók jegyzetek, XML-konfiguráció vagy sok további kód írása nélkül. |
| Fő funkciója? | Függőséginjektálás | Automatikus konfigurálás |
| Beágyazott kiszolgálók? | Nem. A Springben explicit módon kell beállítania a kiszolgálókat. | Igen, a Spring Boot beépített HTTP-kiszolgálókat tartalmaz, ilyen például a Tomcat és a Jetty. |
| Hogyan van konfigurálva? | A Spring-keretrendszer rugalmasságot biztosít, de a konfigurációját manuálisan kell létrehozni. | A Spring Boot a Springet és más külső keretrendszereket a „konvencióalapú kódolás” alapértelmezett alapelvével konfigurálja automatikusan. |
| Tudnom kell XML-lel dolgozni? | A Springben szükség van az XML-konfiguráció ismeretére. | A Spring Boot nem igényel XML-konfigurációt. |
| CLI-eszközök? | A Spring-keretrendszer önmagában nem biztosít CLI-eszközöket. | Spring-modulként a Spring Boot rendelkezik egy CLI-eszközzel. |
| Megközelítés | Vélemény nélküli | Véleményezett |
Tanulási Tippek és Erőforrások Kezdőknek
Miért tanulja meg a Java-t? A Java szinte a legjobb programozási nyelv, amelyet programozási útja során elkezdhet. Biztos, hogy nincs más programozási nyelv, amely szélesebb körű munkalehetőséget kínál, mint a Java? Tehát nem lehet munkanélküli, ha tudja, hogyan kell Java nyelven kódolni (65 986 állás az Egyesült Államokban a Glassdoor webhelye szerint).
Hatékony Tanulási Módszerek
Ha jól és gyorsan szeretne tanulni, és Java-ban kódolni, mint egy profi, keményen meg kell dolgozni érte. A Java programozás elsajátítása szórakoztató és egyszerű lehet, ha csak ismeri és alkalmazza a megfelelő módszereket. A tanulási eszközök használata és a folyamatos gyakorlás kulcsfontosságú.
- CodeGym: A CodeGym-en elsajátíthatja a Java programozást kezdőknek. A platform kizárólag a Java programozásra összpontosít. Minden a kódolásról, kódolásról és kódolásról szól. Kezdje azzal, hogy egyszerre tanul és gyakorol, mindkettőt egyszerűen gamified formában.
- Mobilalkalmazások: Néhány nagyszerű mobilalkalmazás, amellyel megtanulhatja, a Kickstart Java és a Java programozási útmutató.
- Oktatóvideók: Az oktatóvideók megtekintése szintén nagyszerű módja a Java programozási nyelv elsajátításának. A Youtube-on nagyszerű kurzusokat találhat, például Java oktatóanyagot kezdőknek vagy Bevezetés a Java programozásba.
- Hálózatépítés más tanulókkal: Sokkal gyorsabb módja annak, hogy elmélyítse készségeit, ha hálózatot épít ki azokkal, akik Java-programozást is tanulnak. A Java Programing Forum és az Oracle Community két fő platform, amelyhez csatlakozni kell.
Tippek Jó Java Kód Írásához Kezdőként
Ha kezdőként jó Java kódokat szeretne írni, vegye figyelembe a következő tippeket:
- Először értse meg az alapokat.
- Ne siessen mindent egyszerre megtanulni.
- Dobja le a felesleges tárgyakat.
- Ne felejtse el lefoglalni a memóriát.
- Használja a Java szabványos könyvtárát.
- Válasszon egy primitív osztályt.
- Kódoljon naponta.
- Soha ne hagyja abba a kódolást.