Een racewagen met 1.000 PK gebruik je natuurlijk vol gas op het circuit en niet binnen de bebouwde kom om hooguit 50 km/u te rijden. De meeste IDE’s die developers gebruiken, beschikken -net als een racewagen- over enorm veel krachtige features. Features die je de mogelijkheid geven om op topsnelheid te ontwikkelen. Hard rijden kan iedereen, maar hoe word je nou de Max Verstappen onder de developers? Dat lees je in dit artikel over IntelliJ.

Door Pim Hazebroek, origineel verschenen in Java Magazine #4 2019 van de NLJUG

Keyboard shortcuts

Veel programma’s bieden keyboard shortcuts. CTRL+C/CTRL+V zijn ongetwijfeld bekend. Om een IDE effectief te gebruiken, kan je niet zonder. Voor de meeste acties zijn al standaard shortcuts gedefinieerd. Waar deze nog niet gedefinieerd zijn, kan je deze zelf toewijzen. Het leren van al deze shortcuts vergt veel tijd en oefening. Om dit proces wat te vereenvoudigen, zijn plugins beschikbaar, zoals Key Promoter X voor IntelliJ en MouseFeed voor Eclipse. Deze plugins geven je tips met shortcuts waarmee je dezelfde actie ook had uit kunnen voeren. Daarnaast zijn er ook cheat sheets met handige shortcuts te vinden. Zie bijvoorbeeld Keymap Reference via het Help menu van IntelliJ.

Wanneer je al enige tijd gebruik maakt van dezelfde IDE en de meeste shortcuts kent, loont het om je af te vragen welke acties je regelmatig uitvoert met de muis of via het menu. Probeer jezelf eens te dwingen dezelfde actie met een shortcut uit te voeren. Als de standaard shortcut je niet lekker ligt, pas deze dan aan. Als je écht ver wilt gaan, dan kan je zelfs de toolbars weghalen. Leuk voor als je collega komt pair-programmeren en al je toolbars zijn weg.

Alle shortcuts die genoemd worden in dit artikel zijn gebaseerd op de default keymap van IntelliJ voor macOS / Windows, tenzij anders aangegeven.

Alles onder één dak

Het wisselen van context is killing voor je productiviteit. Het wisselen tussen applicaties kost ook tijd. Daarom kan het efficiënter zijn om alles onder één dak te hebben. Het beheren van je docker containers, je database, het runnen van je code en versie beheer. Allemaal zaken die menig developer buiten zijn IDE regelt. Nu is daar op zich niks mis mee. Veel van deze zaken worden ook out of the box al ondersteund. In sommige gevallen heb je hier plugins voor nodig. Voor database en docker integratie heb je bij IntelliJ wel de betaalde Ultimate edition nodig. Het voordeel is dan wel dat je IDE je beter kan ondersteunen met code completion op basis van je database schema en je kan je docker container starten via een run configuration.

Run configs

Veel projecten bestaan uit meerdere componenten. De frontend en backend of meerdere microservices. Ongeacht hoe je project eruitziet, gedurende de dag start of debug je verschillende componenten. Misschien wel meerdere tegelijk. Nu kan je natuurlijk naar de commandline schakelen om een maven commando te typen. Waarschijnlijk zit je nog niet in de juiste directory en moet je daar eerst naartoe navigeren. Kostbare tijd gaat verloren en dat meerdere keren op een dag. Door de slimme run configurations te gebruiken, kan je deze stappen overslaan. In afbeelding 1 zie je hoe dit er in IntelliJ uitziet.

Afbeelding 1. run configuraties

Hier zijn verschillende run configs te zien: een aantal maven commando’s, het runnen van de Angular frontend en de Spring Boot backend en een compound ‘Run app’ die beide tegelijk start. Via de Run action (keyboard shortcut ⌃+⌥+R / ⇧+Alt+F10) kan dit dialoogvenster gemakkelijk opgeroepen worden. De cijfers kunnen gebruikt worden als extra shortcut. Voor run configs zonder cijfer kun je ook filteren door speed search te gebruiken. Door “ia” te typen selecteer je install api. Tip: houd ingedrukt om als debug te starten.

Services tool window

Stel dat je de frontend en backend runt, dan krijg je twee tabbladen in je run tool window, het venster waar je de status van je applicaties ziet. Sinds IntelliJ 2019.2 is het mogelijk om deze te combineren in één view onder de services tool window [1]. Daarvoor moet je deze eerst toevoegen. Via edit configurations (te vinden via de keyboard shortcut voor run action gevolgd door “0”).

Om dit te gebruiken, dien je eerst het type run configuratie toe te voegen in edit configurations, te vinden via de keyboard shortcut voor run action gevolgd door “0”. Onder de groep templates kan je de gewenste soorten run configs toevoegen, zoals npm en Spring Boot. Docker integratie wordt hier automatisch al weergegeven. Afbeelding 2 toont het resultaat van de 2 draaiende applicaties in de services tool window.

Afbeelding 2. Services tool window

VCS Operations

Als je aan een feature werkt die meerdere componenten omvat, en je gebruikt netjes feature branches, dan is het sterk aan te raden om de Git integratie van je IDE te gebruiken. Zo kan je gemakkelijk de laatste wijzigingen binnenslepen en branches aanmaken. Met IntelliJ is het zelfs mogelijk om acties uit te voeren op alle repositories die je hebt uitgecheckt in je project. Maak je bijvoorbeeld een nieuwe branch aan voor je nieuwe feature, dan wordt deze meteen op al je componenten aangemaakt. Natuurlijk is het ook nog steeds mogelijk om per repo een branch aan te maken. Met de shortcut Ctrl+V / Alt + ` kan je in IntelliJ het VCS operations venster openen, maar nog sneller is om de relevant acties rechtstreeks te starten. Voor commit, pull en push zijn daar al standaard shortcuts voor, maar voor branches niet. Het is daarom raadzaam om bijvoorbeeld ⌘+B / Ctrl+B toe te wijzen aan de branches action. Zie afbeelding 3, dit laat het Git Branches dialoogvenster zien. Ook hier werkt de speed search en kun je razendsnel op repository filteren en een actie kiezen.

Afbeelding 3. Git branches

Sinds IntelliJ 2019.2 is het mogelijk om rechtstreeks vanuit de Local Changes toolwindow te committen. Te openen via ⌘+K / Ctrl+K. Als je daarnaast ook nog eens de preview diff view opent, kan je gemakkelijk je wijzigingen controleren voor je ze incheckt. Zo spot je nog snel die TODO of commented out code die je was vergeten te verwijderen en voorkom je weer feedback op je pull request. Afbeelding 4 laat zien hoe dit eruit ziet.

Afbeelding 4. Local changes toolwindow met commit message en diff viewer.

Templates

Templates, ook wel bekend als Live Templates voor IntelliJ, stellen je in staat om vliegensvlug code te genereren. Wanneer je “sout“ typt en op tab drukt, zal je IDE  “System.out.println();“ genereren. Dit is een template en geen auto completion. Neem eens een kijkje in de templates en je zult je verbazen hoeveel nuttige templates er zijn die je tot op heden altijd handmatig schreef.

Voor die gevallen waar nog geen template voor is, kan je die soms als plugin downloaden of zelf definiëren. Zo laat listing 1 zien hoe een live template voor een junit test eruit ziet in IntelliJ. De fully qualified name wordt vervangen door imports en de parameter $METHOD_NAME$ fungeert als placeholder. $END$ is een speciale variabele waar de cursor geplaatst wordt wanneer je klaar bent met het invullen van de template. Templates hebben een afkorting welke getypt moet worden. Vervolgens kan je de template invoegen met tab. Afbeelding 5 toont een voorbeeld van een template voor een assertThat(…) statement.

Afbeelding 5. Live template voor een assertThat statement

Het is mogelijk om allerlei handige functies aan variabelen in templates te geven. Dankzij de complete() expression krijg je automatisch suggesties voor logische variabelen om te gebruiken. Zie [2] voor een overzicht van alle mogelijkheden.

Deze mag je niet missen

Tot slot nog een handig lijstje met features die je als effectieve IntelliJ gebruiker zeker niet mag laten liggen:

  • Context aware selection (⌥+up/Ctrl+W) – om slim code te selecteren i.p.v. met de cursor of shift en pijltjes toetsen.
  • Complete statement (⇧ + enter) – plaatst de cursor op de volgende regel zonder je statement te slopen.
  • Extract → var/field/param/constant/method (⌘+⌥/Ctrl+Alt) + V/F/P/C/M – om in talloze situaties iets te extraheren.
  • Scratch files (⌘+⇧+N) – naamloze bestanden met alle voordelen van de editor, zoals syntax highlighting.
  • Language injection [3] – Om bijv. een String in een Java class met JSON te bewerken als JSON. Biedt de mogelijkheid de inhoud van de String in een aparte editor te bewerken.
  • Add selection for next occurrence (Ctrl+G / Alt+J) – dupliceert je cursor naar het volgende soortgelijke code. Handig om snel een variabele te hernoemen bijvoorbeeld.
  • Productivity guide (via help menu) – Om te zien welke features je vaak en minder vaak gebruikt, zie afbeelding 6.

Afbeelding 6. productivity guide

Conclusie

Om als developer echt effectief te ontwikkelen, is het belangrijk om je IDE goed te kennen en alle features die het biedt ook daadwerkelijk te benutten. Er komen ook regelmatig nieuwe features bij die je leven weer een stukje aangenamer maken. Het is dus zinvol om up-to-date te blijven. Het is niet iets wat je even in een dagje kunt leren, maar waar je echt gedurende langere tijd energie en moeite in moet steken. Het gaat om de mindset, stel jezelf telkens weer de vraag: hoe kan ik dit efficiënter doen? Zolang je dit doet, word je elke dag weer een stukje sneller met je IDE. Ondertussen kan je jouw hersencapaciteit gebruiken voor de inhoudelijke kant van het ontwikkelen. Tot je natuurlijk zo snel kunt programmeren dat je hersens het niet meer bijbenen en de bottleneck worden.

Referenties:

  1. https://blog.jetbrains.com/idea/2019/08/services-tool-window-one-place-to-rule-them-all/
  2. https://www.jetbrains.com/help/idea/template-variables.html
  3. https://www.jetbrains.com/help/idea/using-language-injections.html

 

Biografie Pim

Pim is een pragmatische perfectionist bij Team Rockstars IT. Hij draait altijd op de early access versies van IntelliJ en in zijn vrije tijd zit hij graag op een mountainbike.