Á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 → Keys → unbind Run Gradle Test (Ctrl+Alt+X, G) (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… → Indentation → Tab policy → Spaces only (ugyanez; legyen egységes); itt át kell nevezni fent az Active profile nevet.
- 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
A Visual Studio Code (https://code.visualstudio.com/; nem összetévesztendő a Visual Studio-val) egy olyan, a programozók számára felokosított szövegszerkesztő, és lényegében mindent beépülőkkel old meg. Így a beépülők abszolút lényeges elemei ennek az alkalmazásnak. Itt felsorolok néhány fontosabb beépülőt:
- Nyelv specifikus beépülők
- Python (https://marketplace.visualstudio.com/items?itemName=ms-python.python)
- Java (https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack)
- C/C++ (https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools)
- C# (https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp)
- PHP (https://marketplace.visualstudio.com/items?itemName=DEVSENSE.phptools-vscode)
- HTML és CSS (https://marketplace.visualstudio.com/items?itemName=ecmel.vscode-html-css)
- MarkDown (https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one)
- Assembly (https://marketplace.visualstudio.com/items?itemName=13xforever.language-x86-64-assembly)
- A fejlesztést segítő beépülők
- Tabnine (https://marketplace.visualstudio.com/items?itemName=TabNine.tabnine-vscode): AI alapú segítséget nyújt a beíráskor.
- IntelliCode (https://marketplace.visualstudio.com/items?itemName=VisualStudioExptTeam.vscodeintellicode): ez is egy AI alapú kiegészítés segítő.
- Prettier - Code formatter (https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode): átalakítja a forráskódot a szokásos konvenciókat alkalmazva.
- Code Runner (https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner): ki lehet jelölni pár sort és azt végrehajtani anélkül, hogy végrehajtanánk az egész programot.
- Better Comments (https://marketplace.visualstudio.com/items?itemName=aaron-bond.better-comments): kiemeli a különböző típusú megjegyzéseket
- TODO Highlight (https://marketplace.visualstudio.com/items?itemName=wayou.vscode-todo-highlight): a TODO-kat kiemeli (hasonló mint az előző).
- Indent Rainbow (https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow): halványan kiszínezi a behúzásokat, és így jobban látható, hogy melyik utasítás melyik blokkhoz tartozik.
- Webes fejlesztést elősegítő beépülők
- Live Server (https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer): ennek segítségével a HTML oldalt nem közvetlenül nyitja meg a böngésző, hanem szerver segítségével. Előnye, hogy ha módosul a fájl, akkor automatikusan újratöltődik. (Szinte mindegyik hasznos Visual Studio Code beépülők lista élén szerepel.)
- JavaScript (ES6) code snippets (https://marketplace.visualstudio.com/items?itemName=xabikos.JavaScriptSnippets): 3 karakteres gyorsbillentyűket hoz létre gyakori JavaScript struktúrák gyors létrehozásához.
- REST Client (https://marketplace.visualstudio.com/items?itemName=humao.rest-client): REST API hívásokat lehet a segítségével létrehozni
- Auto Rename Tag (https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag): annyit csinál, hogy egy HTML oldalon ha átnevezünk egy nyitó tag-et, akkor automatikusan átnevezi a csukót is.
- Regex Previewer (https://marketplace.visualstudio.com/items?itemName=chrmarti.regex): a reguláris kifejezéseket lehet ennek segítségével próbálgatni úgy, hogy bal oldalon szerkesztük a kifejezést, mikörben jobb oldalon egy szövegfájlon automatikusan kiemeli a találatokat.
- CSS Peek (https://marketplace.visualstudio.com/items?itemName=pranaygp.vscode-css-peek): megkeresi a hivatkozott stílusdefiníciót. (Nem sikerült működésre bírnom. A stílus a böngészőben működött, de ha rákattintottam, akkor nem találta.)
- Import Cost (https://marketplace.visualstudio.com/items?itemName=wix.vscode-import-cost): kiírja, hogy melyik JavaScript import mekkora méretű. (Nem sikerült működésre bírnom, nálam nem írta ki.)
- Verziókövető beépülők
- GitLens (https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens): halványan megjeleníti azt, hogy az adott sort mikor és ki módosította.
- Git History (https://marketplace.visualstudio.com/items?itemName=donjayamanne.githistory): megjeleníti a fájlok verziótörténetét.
- Egyéb beépülők
- ChatGPT (https://marketplace.visualstudio.com/items?itemName=zhang-renyang.chat-gpt): segítségével közvetlenül lehet kérdezni a ChatGPT-t. (Nem sikerült működésre bírnom, folyton HTTP 429 hibaüzenetet kaptam.)
- Excel Viewer (https://marketplace.visualstudio.com/items?itemName=GrapeCity.gc-excelviewer): ahogy a nevéből is következik, Excel táblázatokat lehet ennek segítségével nézegetni, módosítani.
- Remote SSH (https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh): segítségével távoli gépre tudunk csatlakozni. (Nem sikerült kipróbálni.)
- PolarCode (https://marketplace.visualstudio.com/items?itemName=pnp.polacode): segítségével a forráskódról tudunk képeket készíteni.
- Code Spell Checker (https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker): helyesírás ellenőrző
- Peacock (https://marketplace.visualstudio.com/items?itemName=johnpapa.vscode-peacock): segítségével a teljes Visual Studio Code színvilágát át lehet állítani. Ennek akkor van értelme, ha több VS Code is fut egyszerre, különböző workspace-eket megnyitva.
- VSCode Icons (https://marketplace.visualstudio.com/items?itemName=vscode-icons-team.vscode-icons): lecseréli az alapértelmezett fájl és könyvtár ikonokat markánsabbakra.
A legtöbb műveletet úgy tudjuk elérni, hogy az F1 lenyomása után a felugró beviteli sorba beírjuk.