senäh

17senäh und so…

Allgemein
15. Nov 2012
Kommentare: 0

IDE-Features für effizienteres Coden

Kategorien: Allgemein | 15. Nov 2012 | Kommentare: 0

Serie: 10 Features, die dein Texteditor haben sollte, und warum ich die JetBrains IDEs vergöttere

Ihr habt den ersten Teil meiner Lobpreisung auf die JetBrains-IDEs gelesen? Gut, denn genau da setze ich nahtlos an. Ich hatte ausführlichst beschrieben, was ein Texteditor leisten sollte, um dem Entwickler zu helfen, das eigentliche Schreiben von Code so effizient wie möglich zu gestalten. Stehen noch Feature Numero 2 bis 10 aus 😉

2. Navigation in Projekt und Dateien

IDE sollten ein cleveres Projekthandling bieten, damit sich der Entwickler auch in großen Projekt zurechtfindet. Statt sich mit der Maus durch den Navigationsbaum zu quälen, sollte schnelles Öffnen von Dateien sowie das Springen zur richtigen Stelle in der Datei selbst eine Selbstverständlichkeit sein.

Öffnen von Dateien

In phpStorm z.B. habt ihr den Shortcut ⌘⇧N, um eine Datei im Projekt zu suchen. Da die Dateien vorher indiziert wurden, geht das natürlich angenehm schnell von statten.

Dabei stehen euch verschiedene Möglichkeiten zur Verfügung, die ich euch am Beispiel einer Datei namens meine_coole_datei.php im Unterordner Mein/Cooler/Pfad/ vorstellen möchte:

  1. Eingeben der ersten Buchtaben (meine_co)
  2. Eingeben von beliebigen Teilen des Dateinamens (mecd)
  3. Auch Ordner-Einschränkungen sind möglich (m/c/p/mced)

Als ich mir damals (back in the days) das offizielle Video dazu angesehen habe, war ich echt geflasht.

Jump To Symbol

Oft weiß ich nicht mehr genau, in welcher Datei sich eine Methoden- oder Variablen-Deklaration befindet. Das lässt jetzt tief auf meine Dev-Skills blicken, aber JetBrains hilft mir da aus. ⌘⌥⇧N ist der Shortcut für Jump To Symbol. Dadurch könnt ihr jederzeit zu einer Klasse, einer Methode, einer Variable springen, unabhängig vom aktuellen Kontext oder der gerade geöffneten Datei.

Tabs

Kann man jetzt Freund von sein oder auch nicht, auf jeden Fall ist es meiner Meinung nach die zeitgemäße Organisation von geöffneten Dateien. Ich habe mir die Tab-Funktionalität so zurechtkonfiguriert (dazu später mehr), dass es wie im Chrome ist. Das bedeutet ⌘⌥← und ⌘⌥→ lässt mich zwischen den Tabs wechseln und ⌘⇧T öffnet den zuletzt geschlossenen Tab. Neue Tabs werden geöffnet, sobald ihr eine neue Datei öffnet. Logisch.

Möglichst ist auch eine dem Applicaton Switcher (⌘Tab bzw. Alt+Tab unter Windows) angenäherte Navigation. Über Ctrl+Tab lassen sich die zuletzt verwendeten Dateien auswählen.

Switcher für zuletzt geöffnete Dateien

Switcher für zuletzt geöffnete Dateien

Aktion finden

Ihr kennt das sicher: manchmal stolpert ihr über ein Feature, das ihr selten benutzt, dennoch genial findet, den Shortcut bzw. Ort des Menüeintrags dazu aber immer wieder vergesst. Vielleicht vergesst ihr regelmäßig die Tastenkombination für das Auskommentieren von ganzen Blocks, oder für das Suchen und Ersetzen in mehreren Dateien.

In den Jetbrains IDEs könnt ihr über ⌘⇧A alle möglichen Befehle durchsuchen. Beispiele?

Action suchen: find in

Action suchen: find in

Action suchen: comment block

Action suchen: comment block

Action suchen: wrap

Action suchen: wrap

Dadurch habt ihr jederzeit jede Aktion parat, egal ob ihr euch gerade an den Shortcut bzw. die Menü-Position erinnern könnt oder nicht. Hilft sowohl die IDE kennenzulernen, als auch selten verwendete Features schnell aufzufinden.

3. Schnelles und flexibles Finden/Ersetzen von Textstellen

Die Umsetzung des Suchen/Ersetzen-Vorgangs in den JetBrains IDEs ist das Beste, was ich je gesehen habe. Warum?

Wenn ich ein Wort markiere und ⌘F für Suchen drücke, wird mir dieses Wort gleich im Suchfeld angezeigt. Üblicherweise muss man das Wort erst kopieren und in das Suchfeld einfügen. Außerdem wird mir direkt das erste Ergebnis angezeigt, ohne dass ich erst Enter drücken muss. Es sind mal wieder Kleinigkeiten, die den Unterschied ausmachen.

Automatisches Einfügen des ausgewähltes Texts

Automatisches Einfügen des ausgewähltes Texts

Dazu kommt, dass beim Ersetzen von regulären Ausdrücken eine Vorschau eingeblendet wird. Unfassbar hilfreich. Ich erwische mich immer wieder dabei, dass ich phpStorm aufmache, um einen regulären Ausdruck zu testen und direkt zu optimieren, einfach weil es wesentlich besser ist, als ständiges Anwenden und Rückgängig machen, um Fehler auszugleichen. Preview FTW!

Vorschau der Ersetzung durch reguläre Ausdrücke

Vorschau der Ersetzung durch reguläre Ausdrücke

Nicht zuletzt ist auch das projektweite Suchen und Ersetzen ein wichtiger Aspekt. Haben die JetBrains IDEs natürlich mit an Bord, egal ob in einem bestimmten Ordner oder projektweit. Normale Suche, ebenso wie reguläre Ausdrücke sind möglich. Zusätzlich kann man über ein Dropdown-Feld vergangene Suchen erneut ausführen.

Die Ergebnisse werden geordnet nach Ordner und Datei angezeigt, Irrelevante lassen sich – for the sake of bessere Übersicht – über die Entfernen-Taste durchstreichen.

4. Volle Konfigurierbarkeit von Shortcuts

Tastenkombinationen sind des Entwicklers beste Freunde und der erste Schritt hin zu effizientem Coden. Wer von IDE XYZ kommt, hat vermutlich gewisse Vorstellungen welche Shortcuts welche Funktionen zu triggern haben. Manchmal sind die Defaults auch nicht besonders klug gewählt, so dass eine Anpassung der Shortcuts nötig ist.

Die JetBrains IDE bieten hier eigentlich alles was ihr braucht. Ihr könnt eure Keymap – so heißt die Abbildung von Aktionen auf Shortcuts – sowohl nach Namen der Aktion, als auch nach der Tastenkombination durchsuchen. Außerdem lassen sich auch primäre und sekundäre Shortcuts angeben. Ich habe z.B. den Shortcut ⌘/ für das Auskommentieren/Entkommentieren von markierten Zeilen. Leider ist ein Ziffernblock dafür Voraussetzung, welchen ich auf meinem MacBook nicht habe. Abhilfe schaffen Sekundär-Shortcuts (in meinem Fall ⌘⇧7 und anschließend B für Block Comment bzw. L für Line Comment).

5. Autocompletion, auch für “einfache” Wörter

Autocompletion. Eigentlich das Herz jeder IDE, wenngleich sich die Qualität doch arg unterscheidet. Was ich brauche:

  • Autocompletion für Core-Funktionen der jeweiligen Sprache (z.B. in_array in PHP)
  • Autocompletion für eigene Methoden/Klassen/Variablen
  • Autocompletion für bereits getippten Strings

Letzteres sieht man selten, hilft aber immer dann, wenn man in Doc-Blocks Kommentare festhält und lange Wörter ständig wiederholt. In den JetBrains IDEs gibt es eine Funktion namens Cyclic Expand Word, die bei Ausführung das aktuelle Dokument nach Wörtern untersucht, die ich meinen könnte. So wird aus Qua per Ctrl+Esc (bei mir) eben Quadraturamplituenmodulation 😉

Auch hier trumpft JetBrains wieder mit Intelligenz auf. So reicht ein MCK und ein Tastendruck auf Ctrl+Leertaste für die Expansion zu Meine_Coole_Klasse().

Sehr nützlich ist auch ⌘P, was innerhalb eines Methodenaufrufs die erwarteten Parameter inkl. Typen und Beschreibung auflistet (sofern angegeben). Hilft dem zur Vergesslichkeit neigenden Entwickler.

Dokumentation für Methodenparameter

Dokumentation für Methodenparameter

6. Springen zu Deklarationen

Wichtig ist auch, dass ich per ⌘Klick auf einen Methodennamen zu deren Deklaration komme – wo auch immer diese zu finden ist. Ich verstehe gar nicht, wie man ohne dieses Feature ordentlich entwickeln kann. Spätestens dann, wenn man sich in ein bestehendes Projekt einarbeiten soll, lernt man diese Fähigkeit zu schätzen.

7. Hinweise auf Syntax- und ähnliche Fehler

Wir sind Entwickler, wir machen Fehler. Kennt ihr sowas hier?

Dieses Scheiß PHP! Das MUSS funktionieren. Dieser Fehler ist TOTAL unlogisch…


Oh, Semikolon vergessen.

Ein von mir sehr geschätzter Entwickler meinte mal, dass der Großteil des Entwicklerdaseins darin besteht, Fehler zu beheben. Vermutlich hat er Recht. Auf einen Teil der Fehler können IDEs bereits hinweisen, bevor überhaupt irgendein Stückchen Code ausgeführt wird. JetBrains IDEs sind recht gut darin. So gibt es Hinweise für:

  • Syntaxfehler,
  • nicht definierte Variablen (auch solche, die eventuell durch ausschließliche Deklaration in if-Blöcken nicht definiert sein könnten), Klassen und Methoden,
  • ungenutzte Variablen,
  • redundante Deklarationen bzw. Zuweisungen,
  • nicht vergebene IDs, die in einem a-Tag referenziert werden,
  • ineffiziente jQuery-Selector-Benutzung,
  • mögliche Vereinfachungen in if-Bedingungen,
  • eventuell ungewollte Zuweisungen (z.B. var width = $(‘#blub’).height();),
  • Verstöße gegen StyleGuides
  • und sicher noch einiges, das ich hier vergessen habe.

Verschiedene Hinweise haben mir sogar initial beim Verständnis von JavaScript-Closures geholfen. Vor allem sparen die Hinweise einen Haufen Zeit.

8. Schnelles Refactoring

Refactor early, refactor often.

Sollte man beherzigen, wenn der eigene Code sowohl für einen selbst als auch für andere Beteiligte auch noch in naher Zukunft les- und wartbar bleiben soll. JetBrains IDEs machen die Arbeit hier recht einfach.

Beim einfachen Umbenennen von Dateien wird stets auch nach Verweisen gesucht um diese ggf. zu ersetzen. Selbiges beim Refactoren von Variablen, Klassen und Methoden. Schlussendlich ist das aber nichts weiter als ein automatisiertes Search & Replace. Von daher ist dieser Vorgang keine große Magie und sollte immer mit an Bord sein.

Richtig cool wird es aber, wenn es darum geht, einen Block Code in eine Methode oder eine Variable zu verwandeln bzw. deren jeweilige Umkehr. Das Potential hier ist echt fett. Schaut euch mal dieses und dieses Video dazu an.

Dass RubyMine als Rails-IDE bei Umbenennung einer Action im Controller das dazugehörige View-Template entsprechend umbenennt, muss ich nicht extra erwähnen, oder? 😉

9. Versionkontrolle, Debugging, etc.

Nice to have sind auch immer Features, die andere Tools überflüssig machen. So z.B. eingebautes Debugging oder eben Unterstützung für Versionskontrolle (geänderte Dateien anzeigen, Dateien für den Commit bestimmen, Diffs, etc.). Es ist immer cool, wenn man schnell einen Commit über das minimale graphische Interface abfeuern kann, dass die JetBrains IDEs bieten. Für die meisten simplen Belange ist das durchaus genug.

Abseits von Debugging und Versionkontrolle habe ich in Rails die generelle Integration lieben gelernt. Ich kann Migrations (Änderungen im Datenbankschema) erstellen, Generators (Skripte für das automatisierte Erstellen von Controllern, Models und noch mehr) aufrufen und dabei auch noch Autocompletion verwenden. Im Server-Log sind bei auftauchenden Fehlermeldungen die betroffenen Dateien und Zeilen im Trace Stack verlinkt, so dass ich mit einem Klick direkt zur problematischen Stelle komme. Möchte ich nicht mehr missen.

Über Fenster an der Seite, die per ⌘+Zahl einblendbar sind (z.B. ⌘9 für die Versionskontrolle), hat man Zugriff auf weitere nützliche Features. So werden TODOs aufgelistet (ein Klick bringt den Entwickler selbstverständlich direkt an die betreffende Stelle) und die Zusammensetzung einer Klasse kann schnell überblickt werden (Variablen, Methoden inkl. Parameter, public/private etc.).

Ich finde diese kleinen Specials machen eben den großen Unterschied zwischen einfachen Text-Editoren und richtigen IDEs aus.

10. Plugin-Architektur

Auch wenn ich lieber Features Out-of-the-Box habe, statt mir Programme mit Plugins zuzupflastern – weswegen ich hin und wieder doch Groll gegen Sublime Text 2 hege – kann eine leicht zugängliche Plugin-Architektur der Schlüssel zu einer lebendigen Community sein und somit merklich zum Erfolg einer IDE beitragen.

Da ich wie gesagt nicht der große Fan davon bin und mir die JetBrains IDEs so schon so ziemlich alles geben, was ich benötige, werde ich hier keine großen Anforderungen stellen. Jedoch weiß ich, dass ich AceJump nie wieder missen möchte.

Fazit

Ich habe versucht mich im zweiten Teil kürzer zu halten, sonderlich gut gelungen ist mir dies aber scheinbar nicht. Ich könnte endlos lange Referate über die JetBrains IDEs halten, weil ich einfach so unglaublich begeistert bin.

Letztenendes ähnelt vom Grundprinzip her vieles davon den Eclipse IDEs. Nur haben die JetBrains-Entwickler ihre Produkte einfach besser zu Ende gedacht, so zumindest mein Eindruck.

Die Performance – um auch etwas über die Schattenseiten zu erwähnen – ist ok. Nicht der absolute Bringer, aber vermutlich guter Durchschnitt unter den IDEs. Das anfängliche Indizieren nach dem Anlegen bzw. Importieren eines neuen Projekts dauert ein wenig. Und der Start des Programms auch. Danach läuft es aber eigentlich angenehm flüssig.

Die IDE ist das wichtigste Tool des Entwicklers. Entsprechend gehen Geschmäcker auseinander. Vielleicht konnte ich ein paar von euch heiß auf eine andere IDE machen, vielleicht ist aus eurer Sicht aber auch der Großteil unnütz. Wie dem auch sei, ich freue mich über Feedback und gegenseitige Inspiration. Ich habe meinen Teil geleistet, jetzt seid ihr dran 🙂

Autor: Enno

Ich bin Enno. PHP ist mein Ding, aber auch alles Neue rund um die Themen HTML5, CSS3 & Co finde ich interessant. Ich mag es Leuten zu helfen und mein Wissen weiterzugeben. Sollte dir mein Beitrag gefallen haben, lass doch nen Kommentar da oder benutze einen der Social Buttons, um deinen Dank auszudrücken ;)