Integrált fejlesztő környezetek

Áttekintés

A kódot elvileg egy egyszerű szövegszerkesztővel, akár Notepad-del is el lehet készíteni. Azonban már a legegyszerűbb estekben is felmerülnek a fejlesztés során olyan igények, amit egy szövegszerkesztő többnyire nem tud. Valamint számos más eszközt is használnunk kell a fejlesztés során: fordítás, futtatás, hibakeresés stb. Felmerül a kérdés, hogy nem lehetne mindezeket a gyakori feladatokat egy rendszeren belül végrehajtani? Az integrált fejlesztőeszközöknek (Integrated Development Environment, IDE) pont ez a feladatuk! Az IDE-k legfontosabb részei az alábbiak:

  • Szövegszerkesztő: itt is ugyanúgy lehet elkészíteni a szöveget mint bármely másik, általános célú szövegszerkesztőben, viszont kifejezetten a programozásra kiegyezett tulajdonságokkal rendelkezik. Pl. kiemeli az adott programozási nyelvben a kulcsszavakat (ezt még tudja mondjuk a Notepad++ is, de a Notepad már nem); jelzi a szintaktikai hibákat; segítséget nyújt a szerkesztésben, pl. egy adott objektum esetén egy lenyíló ablakban megjelennek a meghívható függvények, és elég onnan kiválasztani; lehetővé teszi a gyakori kódelemek legenerálását; automatikus formázásokat hajt végre, és a sor még lehetne folytatni.
  • Fordító, futtató: az IDE folyamatosan fordítja a programot, és már a beíráskor visszajelzést kapunk az esetleges szintaktikai hibákról. Innen el is tudjuk indítani, és ez igaz nemcsak a főprogramra, hanem pl. az egységtesztekre (adott esetben vizuálisan jelezve a kód lefedettséget) vagy az alkalmazásszerverben futó programokra is.
  • Hibakereső: a legtöbb IDE lehetővé teszi azt, hogy hibakereső (debug) módban egyesével lépkedjünk a programsorokon, és közben nézzük a változók és egyebek aktuális értékét. Általában lehet megálló pontokat közbeiktatni, ahol feltételeket adhatunk meg (pl. csak akkor álljon meg, ha egy adott változó értéke ez és ez).
  • Létrehozó: egy projekt elég összetett tud lenni, sok mindent be kell állítani, és ezek legenerálásában segít a legtöbb IDE. Létre tudunk hozni vele új projektet (vagy létezőt betölteni), forrásfájlokat hozzáadni stb.
  • Verziókövető: a fejlesztőeszközök többsége lehetővé teszi a verziókövetővel való integrációt, és akár segíthet pl. a merge során fellépő konfliktusok feloldásában is.

Az alábbiakban pár általános célú fejlesztőeszközt vizsgálunk meg.

Eclipse

Kezdeti lépések

Az Eclipse talán a legnépszerűbb fejlesztő környezet, különösen a Java világban. A https://www.eclipse.org/ oldalról tölthető le. Javasolom, hogy ne az exe telepítőt töltsük le, hanem a zip csomagolt fájlt (https://www.eclipse.org/downloads/packages/ → Eclipse IDE for Enterprise Java Developers, Windows 64 bit), legalábbis nekem szinte mindig problémám volt a telepítőssel. Csomagoljuk ki egy könyvtárba (pl. c:\programs\eclipse\), majd indítsuk el az eclipse.exe-t. Sajnos van neki pár (egyre több…) problémája; az alábbiakat célszerű végrehajtani használatba vétel előtt:

  • Kapcsoljuk ki ezt: "Always show Welcome at start up" (még ez is hibát okoz a működésben!)
  • Windows → Preferences → General → Keys → unbind Skip All Breakpoints (Ctrl + Alt + B) (ha ezt nem tesszük meg, akkor magyar billentyűzettel nem fogunk tudni { karaktert írni.)
  • Windows → Preferences → General → Editors → Text Editors → Insert spaces for tabs (bár ez ízlés kérdése, és projektről projektre eltérhet; alapvetően szóközöket szokás használni tabulátor helyett)
  • Windows → Preferences → General → Editors → Text Editors → Annotations → Search Results → kapcsoljuk ki a Vertical rulert. Enélkül ugyanis az történik, hogy az utolsó keresés eredményét megjelöli kis sárga nyilakkal a sor elején. Ez amiatt zavaró, mert eltakarja a breakpointokat.
  • Windows → Preferences → Java → Code Style → Formatter → Edit… → Intendation → Tab policy → Spaces only (ugyanez; legyen egységes)
  • Windows → Preferences → Java → Editor → Save Actions → Perform the selected actions on save → Additional Actions → Configure → Remove trailing whitespace, All lines (ne maradjon szóköz a sorok végén)
  • Jobb kattintás a betöltött projekten → Properties → Java Build Path → Libraries → töröljük ki az 1.5-ös könyvtárakat → Add Library… → JRE System Library → Next → Workspace default JRE → Finish (alapértelmezésben még mindig az 1.5-ös Java verzióban fordít, ami különösen az 1.8 óta problémás)

Projektek kezelése

Új projektet a File → New → Other… (Ctrl + N) menüpont kiválasztásával tudunk létrehozni. Itt a leggyakrabban használt változatok a Java → Java Project (ez esetben Eclipse specifikus projekt jön létre) és a Maven → Maven Project (ez esetben Maven projekt jön létre, amit más fejlesztőkörnyezetekből is használhatunk). A leggyakrabban használt lehetőségek közvetlenül elérhetőek a File → New kiválasztásakor.

Létező projektet kétféleképpen tudunk betölteni. Az egyik: File → Open Proects from File System, amely a könyvtár kiválasztásával felderíti a forrásokat. A másik - egyébként gyakrabban használt - megoldás az importálás: File → Import… → itt tipikusan a Maven → Existing Maven Projects lehetőséget szoktuk választani, majd Next után ki kell választani azt a könyvtárat, ahol a pom.xml található, és az Eclipse ennek alapján betölti a szükséges dolgokat. Szükség esetén ez azt is jelenti, hogy letölti az internetről. Ehhez megfelelően beállított internetkapcsolatra van szükség. Szükség esetén a proxy-t a Window → Preferences → General → Network Connections alatt tudjuk beállítani.

Forráskód elemek hozzáadása

Csomagot, forrásfájlt és egyéb elemeket a következőképpen tudunk hozzáadni: a kívánt helyen (pl. src/main/java) jobb kattintás → New → itt válasszuk ki a megfelelőt. (Ha nem látjuk, amit szeretnénk, akkor az Other-ben keressük meg) Példák:

  • Package: csomag létrehozása.
  • Class: osztályt, azaz tulajdonképpen Java forrásfájlt tudunk létrehozni. Itt megadhatjuk, hogy legenerálja nekünk a public static void main belépési függvény vázát.
  • Interface, Enum: értelemszerűen.
  • File: bármilyen fájlt létre tudunk hozni ezzel, pl. szöveges vagy konfigurációs fájlt.

Szerkesztés

Szerkesztés során számos segítséget nyújt a környezet:

  • Lehetővé teszik a szokásos szövegszerkesztési műveleteket: beírás, törlés, kivágás, másolás, beillesztés stb.
  • Különböző színekkel és formákkal jelöli az egyes elemeket. Példák:
    • Kulcsszavak: vastagítva, lilás színnel jelennek meg.
    • Az osztály attribútumai kékek.
    • A felsorolás elemei vastagon, kék dőlt betűkkel látszódnak.
    • A megjegyzések általában világoszöldek. Kivétel az API specifikáció, amely világoskék, és szürke vastag betűkkel vannak jelölve a @ karakterrel kezdődő részek.
    • Az annotációk szürkék.
    • Ha egy függvény deprecated, akkor áthúzva jelenik meg.
    • A stringeket kékkel jelzi.
    • A lokális változókat és paramétereket sötétszürkével jeleníti meg.
    • A statikus függvényeket és változókat dőlttel jelzi.
    • Ami talán a legfontosabb: a szintaktikai hibákat pirossal aláhúzza, és ezt a bal oldali Package Explorerben is jelzi.
    • A figyelmeztetéseket sárgával jelöli.
    • A TODO-kat kiemeli világoskékkel.
  • A szerkeszt során is számos segítséget kapunk:
    • A beírás során segítséget kapunk a lehetőségekről. Pl. hosszú változóneveknél kérhetünk kiegészítést, egy függvényhívás esetén megadja a lehetséges paramétereket stb. Ez sok esetben automatikus, de Ctrl + Enter kombinációval külön kérhetjük is.
    • Ha a függvényhez tartozik API specifikáció, akkor azt kijelzi.
    • Ha egy absztrakt osztályból öröklődünk, akkor felajánlja, hogy legenerálna a szükséges függvények fejléceit. Ill. úgy általában: hibák esetén lehetőségeket kínál fel. Pl. nem létező osztályra hivatkozás esetén felkínál hasonló nevűeket; ha megtalálja a classpath-on, akkor a megfelelő importot, vagy új osztály létrehozását.
    • Automatikusan beállítja a behúzást.
    • A szövegeken (kommentek, stringek) helyesírás ellenőrzést hajt végre.
  • További lehetőségek szerkesztés során:
    • Jobb kattintás az osztálynéven → Source → itt tudunk gettereket és settereket, konstruktorokat, equals()-t, hashCode()-ot, toString()-et stb. generálni.
    • Jobb kattintás bármelyik elemen (pl. osztálynév, függvénynév, változónév stb.) → Refactor: itt tudjuk átalakítani a kódot. Talán a leggyakrabban használt lehetőség a Rename, ami végrehajtja a teljes átnevezést. Ez azt jelenti, hogy a használati oldalon (akár más forrásfájlokban) is végrehajtja a módosítást. Az osztálynév átnevezésekor a fájlt magát és átnevezi. A csomagok átnevezésekor az összes package és import megfelelően változik.
    • A Ctrl-t nyomva tartva rá tudunk kattintani a definícióra. Lépkedni oda-vissza az Alt + nyilakkal tudunk.
    • Az előző fordítottja az, hogy az adott elemet ki használja. Ezt a következőképpen tudjuk végrehajtani: jobb kattintás → Open Call Hierarchy.
    • Ha kódrészletet másolunk egyik helyről a másikra, akkor a szükséges importokat is átmásolja.
    • Részletesebb keresést tesz lehetővé a Search → Search… Gyakran használt ezek közül a File Search, amely minden fájlban keres.
    • Automatikus formázás: Ctrl + Shift + F; ezzel a kombinációval a teljes forrást át tudjuk formázni. (Óvatosan érdemes használni, mert megnehezíti a kód ellenőrzést.)

Fordítás, futtatás, hibakeresés

A környezet beíráskor automatikusan fordít. Ez egyben azt is jelenti, hogy letölti a szükséges könyvtárakat. Ezt ki-be lehet kapcsolni a Project → Build automatically menüpontban. Ugyanott lehet törölni a korábbi fordítás eredményét (ezzel kikényszerítve az újbóli fordítást), ill. explicit megadni a fordítást.

A programot futtatni is tudjuk pl. úgy, hogy jobb egérgombbal kattintunk a futtatni kívánt elemen (pl. main függvényen vagy egységteszten, majd Run As, és itt kiválasztjuk a megfelelőt, pl. Java Application vagy Unit Test. Ha az indításhoz paramétereket szeretnénk beállítani, akkor megtehetjük itt vagy a főmenüből, mindkét esetben a Run → Run Configurations-t kiválasztva (Arguments → Program arguments).

Az IDE-k egyik leghasznosabb tulajdonsága a hibakereső (debug) futtatási lehetőség. Ehhez leállási pontokat (breakpoint) állíthatunk be, a program sorszám előtti részre kattintva. indítsuk el a programot debug módban: jobb kattintás a fő függvények → Debug As → Java Application (vagy a megfelelő). EKkor felajánlja a perspektíva váltást (erről később még lesz szó), most fogadjuk el (Switch). Ha megállt a program, akkor le tudjuk kérdezni a változók pillanatnyi értékét. Lépkedni is tudunk a programban, ld. a Run menüt. Lehetőségek:

  • F5: belelépés a függvénybe.
  • F6: a következő utasításra lépés. Tehát ha az aktuális sor egy függvényhívás, akkor azt lefuttatja, és megáll a következő utasításon. Kivéve, ha abban is van leállási pont.
  • F7: kilép az aktuális függvényből.
  • F8: folytatja a rendes futást.

A megállópont lehet feltételes. Kattintsunk a jobb egérgombbal a megállópont kis gombóc ikonján, itt kapcsoljuk be a Conditional-t, és adjuk meg egy akármilyen bonyolult feltételt (pl. input.equals("start") && f(i) == 2).

A Run Configuration párja itt a Debug Configuration.

Igen hasznos tulajdonság a Coverage: ez aut mutatja meg, hogy futás során mely sorok futottak le. Különösen az egységteszteknél érdemes használni, hogy kiderüljön, van-e le nem fedett ág. A fentiekhez hasonlóan az indítása: Coverage As.

Nézetek és perspektívák

Az Eclipse-ben számos nézet van, melyeket a Window → Show View menüpont kiválasztásával tudunk aktiválni. A leggyakoribb nézetek külön fel vannak sorolva, az Other… menüpontot kiválasztva pedig további nézeteket találunk. Néhány példa:

  • Type hierarchy: típushierarchia. Megmutatja, hogy mi miből öröklődik.
  • Call hierarchy: hívás hierarchia: mi mit hív.
  • Breakpoints: leállási pontok hibakeresésnél.
  • Tasks: kigyűjti a TODO-kat.
  • Console: a futás eredménye látható itt.
  • Package Explorer: csomag nézet; a forrásokat nem fájlrendszerként, hanem csomaghierarchiaként illusztrálja.
  • Outline: áttekintést nyújt az osztály attribútumairól és metódusairól.
  • Servers: az alkalmazásszerver beállításokat láthatjuk itt.

A listát lehetne még hosszasan sorolni. Ez olyan, hogy az emberre idővel "ráragadnak" a leghasznosabbak.

Az se jó, ha egyszerre túl sok információt látunk, mert elveszünk benne, így a nézetek csak egy részét érdemes használni. Az, hogy pontosan melyik részét, az attól is függ, hogy mikor: mást kell fejlesztés során, és mást hibakereséskor. A nézetek nevesített részhalmazait perspektíváknak hívjuk. A fent említett perspektíva váltás pl. a Java fejlesztésről a hibakeresésre történt, ahol megjelentek a leállási pontok, a változók értékeit bemutató nézetek stb., és néhány a hibakereséshez kevésbé fontos nézet eltűnt. Perspektívát a jobb felső sarokban található ikonok segítségével, vagy a Window → Perspective → Open Perspective menüpontot kiválasztva tudunk váltani. Mi magunk is tudunk perspektívát létrehozni, bár ilyet ritkán szoktunk tenni.

Beépülők

Ennek a leírásnak nem célja az Eclipse részletes bemutatása, épp hogy a felszínt karcoltuk. De így is látható ennek a rendszernek a rendkívüli gazdagsága. A beépülőkkel a lehetőségek tárháza tovább bővül. A Help → Eclipse Marketplace… menüpont kiválasztásával tudunk beépülőket telepíteni.

NetBeans

TODO

IntelliJ IDEA

TODO

File → Ivalidate Caches / Restart…

Visual Studio

TODO

Visual Studio Code

TODO

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