Pavel Müller
9.9.2009

Eclipse efektivně (1.) – Content Assist



Už delší dobu pozoruju, zejména na školeních, která vedu, že velká část vývojářů není dostatečně efektivní při práci s Eclipse IDE. K vytvoření samostatného kurzu na téma Eclipse efektivně jsem se zatím nedostal, proto jsem se rozhodl, že na toto téma alespoň napíšu sérii článků.

Vůbec se necítím se být odborníkem na Eclipse. V podstatě už jsem jenom běžný uživatel a to, co umím, na to jsem nějak přišel za ty roky sám. Proto chci koncipovat svoje příspěvky ve stylu, jak dělám věci já, nikoli jako úplný výčet možností v Eclipse. Spíše to možná budou takové tipy a triky. Očekávám, že se v reakcích a komentářích dozvím, jak dělat věci ještě efektivněji, protože určitě spousta šikovných funkcí mi zůstala skryta. Pro první příspěvek jsem si vybral téma, které je tak trochu z prostředka. Jde o efektivitu při psaní Java kódu. Předpokládá se, že instalace Eclipse a nastavení projektu už je za námi a my teď uz musíme jen kódovat. Eclipse nabízí velké množtví funkcí usnadňujících a zrychlujících kódování a jejich znalost může několikanásobně urychlit tvorbu a úpravy kódu.

Content Assist

Předpokládám, že všichni Java vývojáři používající Eclipse znají kontextovou nápovědu Content Assist. Jak říká Jarda Tulach, většina vývojářů jsou tzv. empiričtí vývojáři. Tedy nestudují podrobně API, které používají, ale prostě vezmou objekt, dají Ctrl+Mezera a čekají, co jim IDE nabídne.

Content Assist

Všimněte si, že kontextová nápověda tady nabízí metody na rozhraní UserDao a pokud metodami listujeme, tak se k nim zobrazuje JavaDoc. O důvod víc psát aspoň nějakou dokumentaci. Pokud daný objekt resp. jeho třída není z projektu v Eclipse ale z JARu, je vhodné si k němu nakonfigurovat cestu ke zdrojovým kódům, aby se zobrazovala dokumentace a názvy parametrů (Např. Project -> Properties -> Java Build Path -> Libraries -> mylibrary.jar -> Source Attachment).

Camel Case

Content Assist a vůbec hodně dalších funkčností v Eclipse umí pracovat s podporou camel case. Takže když zadáte NPE nabídne se NullPointerException. Funguje to i na další vložené znaky např. NPoiE. Když tohle ovládáte, dokážete velice rychle najít požadovanou třídu, metodu nebo proměnnou.

content-assist-camel-case

Překrytí a implementace metody

Content Assist umí i usnadnit práci při překrývání metod z předka nebo implementaci metod z rozhraní. Opět stačí napsat začátek názvu metody a dát Ctrl+Mezera a vybrat si požadovanou metodu. Tuhle funkčnost hodně využívám, protože je to velké zrychlení práce a člověk neudělá chybu, že místo překrytí metody vytvoří vlastně novou metodu.

content-assist-method-override

Vygenerovaná metoda je vytvořená podle konfigurovatelné šablony (o těch zas někdy příště) a v tomto případě přesně odpovídá rozhraní, odkud jsem metodu chtěl implementovat. BTW všimněte si, že na projektu používáme šablonu, která vyhazuje vyjímku, aby selhaly unit testy, a obsahuje TODO komentář se jménem autora, aby bylo dohledatelné, kdo metodu přidal, ale nenaimplementoval.

content-assist-method-override-2

Getters & Setters

Pomocí kontextové nápovědy jdou také rychle generovat gettery a settery. Opět stačí mít napsanou instanční proměnnou a pak napsat začátek getteru nebo setteru a vygenerovat si ho.

content-assist-setter

Vygenerovaný výsledek: content-assist-setter-2

Názvy parametrů a proměnných

Další hezkou funkčností, kterou celkem intuitivně používám je nápověda na jména proměnných a parametrů metod. Jen si zkuste spočítat, jak velké procento nebude vyhovovat tomu, co Eclipse nabídne. Dost často totiž pojmenujete proměnnou podle názvu třídy nebo jeho části. PropertyEditor instance se jmenuje propertyEditor nebo editor. Navíc lze nabídku názvů konfigurovat v nastavení Java -> Code Style, pokud máte specifickou firemní konvenci.

content-assist-params

Content Assist v JavaDocu

Kontextová nápověda se neomezuje jenom na Java kód. Docela úspěšně si nechávám vypomáhat i při tvorbě JavaDocu. Nabízí se názvy parametrů, JavaDoc tagy a linky na jiné třídy jako v následujícím příkladu.

content-assist-javadoc

Závěr

Jestli to ještě neumíte, naučte se používat kontextovou nápovědu. S dobrou znalostí toho, co Eclipse nabízí, dokážete být výrazně efektivnější při práci s Javovskými zdrojovými kódy. V příštím díle pořád ještě zůstaneme u editace Java kódu a ukážeme si Quick Fix, který taky dokáže velmi pěkně usnadnit práci.

Vaše emailová adresa nebude zveřejněna

Komentáře

Děkujeme za váš komentář
Další
  • Jerry!

    Ještě bych připomněl "advenced" použití content assistu - zde v článku je prezentován pouze jeden z mnoha pomocníků, jak je dole v popup okně vidět, lze pomocí kombinace ctrl+space přejít na další verzi, kde nabízí třeba uživatelské templaty, swt, groovy .. etc. Zároveň lze s content assistem i generovat cykly, podmínky ... obecně bych řekl: Zkuste si kdykoliv v editoru zmáčknout ctrl+space, možná budete příjemně překvapeni :)

  • Pavel Müller

    Přednastaveným šablonám a vytváření uživatelských šablon se chci určitě ještě věnovat v samostatném příspěvku. Sem se nevešlo spousta věcí. Třeba i bohaté možnosti nastavení Content Assistu.

  • Lukas Petricek

    diky, O pouziti Asistu pri pretezovani a pojmenovavani promennych jsem nevedel.

  • ARny

    gettere a settre sa daju generovat cez prave tlacitko->source->genereate getters and setters. Je to idealne ked sa vytvara entita tak iba nadefinujem privatne property a gettre a settre si necham vygenerovat. Inak musim povedat ze eclipse nieje velmi dobry nastroj na vyvoj. Teda neviem ako vy ale neviemeho nakonfigurovat tak aby fungovalo napr. debugovanie webovej aplikacie. Raz to ide ale vacsinou nie a predstavte si vyvoj bez debugovania. Celkovo novy eclipse hodnotim ako nedokonceny produkt. Bohuzial to tak vypada ze je to nosne IDE pre vyvoj v jave co je smutne.

  • Peter

    to ARny: vsetko co je spominane v clanku sa vacsinou da vyvolat aj mysou, ale prave o to ide, ze je jednoduchsie ked ma clovek ruky na klavesnici stlacit ctrl+1, ctrl+space, ctrl+shift+r, ctrl+h, ctrl+o, ctrl+t, ctrl+shift+o ... S debugovanim som nemal najmensi problem, co netvrdim, ze tam nejaky problem nemoze byt, ak ste objavil bug, reportujte ho a oni ho opravia v dalsich verziach, budete mat z toho dobry pocit. Eclipse je zadarmo a podla mna moze kludne konkurovat / konkuruje ostatnym nastrojom ako su Netbeans(tiez zadarmo), IntelliJ IDEA, RAD(maskovany eclipse) ... Ano Eclipse je nedokonceny, lebo sa stale vyvija, ale nie, ze by to znamenalo, ze je nefunkcny, x ludom uplne vyhovuje(mne sa paci ovela viac ako netbeans) a splna skoro vsetky moje poziadavky a co robi, to robi dobre. Za nosne IDE by sa skor dal povazovat Netbeans, kedze java je od Sunu a Netbeans tak isto.

  • Jsem zvědavý na pokračování o přednastavených šablonách. Hojně používám třeba sysout pro System.out.println, test, for a další.

  • Michal

    to ARny: Vas problem by som nevidel v chybnom IDE, skor niekde v konfiguracii Eclipsu alebo weboveho kontajnera. Ja pouzivam eclipse intenzivne uz par rokov a povazujem ho za vynikajuci produkt. Stabilita, performance a efektivita prace su vyborne. Netvrdim ze je to najlepsie IDE pod slnkom, ale nema k tomu daleko :)

  • Marmax

    Nevíte někdo, zda jde změnit velikost zobrazovaného okna pro Content Assist?

  • Marmax

    Tak se omlouvám, týká se jen linuxu (není nad to, si rovnou odpovědět) - občas si říkám, že je dobré u každého programu aktivně nastudovat/sledovat bugy :) https://bugs.eclipse.org/bugs/show_bug.cgi?id=23980

  • ad Závěr - jen bych dodal - pokud to ještě neumíte naučte se také používat klávesové zkratky na všechny operace, které používáte více než 3x denně a je potřeba chytnout myš a projít několik úrovní menu. Ideální "studijní materál" pro Eclipse je Key assist (Shift+Ctrl+L).

  • Pavel Müller

    @Martin: Klávesovám zkratkám různého typu se taky plánuju věnovat v některém z dalších článků.

  • Robin Cousins

    Hodně se to kouše, mám tam plugin pro Android SDK a tam se na Content Assist čeká jednu minutu. Například u handle prvků TextView po vložení tečky se kontext zasekne a až za minutu vypíše obří seznam. Zakázal jsem v nastavení reagovat na tečku, nicméně by mě zajímalo zda lze obsah seznamu omezit jen na určitý počet položek např. max 100 položek.