Was sind die beeindruckendsten Tricks, die eine IDE mit dem Code ausführen könnte? [geschlossen]


18

Moderne IDEs haben eine Menge Tricks parat, um beim Schreiben, Umgestalten und Suchen von Code zu helfen. All das ist sehr hilfreich, aber selten sieht eines von ihnen wie eine echte "Magie" aus und lässt mich denken: "Wow! Wie hat es das herausgefunden?"

Können Sie beeindruckende Funktionen für die IDE-Code-Automatisierung (oder andere) nennen, die Sie beim ersten Mal in den Bann gezogen haben?


3
Gute Frage, würde gerne mehr Antworten sehen ... Bounty!
Tamara Wijsman

Ich weiß nicht, ob dies eine Antwort sein soll, aber warum sehe ich keine Erwähnungen von IntelliJ IDEA ?
Mark C

5
Echte Programmierer benutzen Schmetterlinge.
Rightfold

Verhindern Sie, dass ich Fehler verursache;)
Travis Christian

Dies sollte nicht geschlossen werden, es ist die perfekte Frage für hier, imho
NimChimpsky

Antworten:


29

Rückwärts-Debuggen

Mit Visual Studio 2010 (und jetzt 2012) kann ich mit IntelliTrace rückwärts debuggen .

Nie wieder muss ich den Moment wieder erleben, in dem ich F10 ein Mal zu oft drückte und das Debuggen neu starten muss.


2
Ich habe das noch nicht benutzt, aber ich möchte.
AShelly

Ich habe dies auch nicht verwendet (ich verwende RAD Studio für Delphi), aber es klingt wie ein wahr gewordener Traum. (Aber ist das eine gültige Antwort auf diese Frage? Es ist eher ein Debugger-Feature als ein Code-Editor-Feature. Nun, es ist ein Teil der IDE, also vielleicht ...)
Andreas Rejbrand

+1000: Das ist so nützlich.
Callum Rogers

Hat es einen COME FROM-Befehl? :)
Joonas Pulakka

2
das Problem ist , dass Sie dies mit MS Sprachen (verwaltet) und nicht mit C nur tun können , ++, zum Beispiel
den Weg

16

Code-Vervollständigung

Wenn Sie nur einen Texteditor gesehen haben, ist dies beeindruckend


3
Eigentlich nicht allzu beeindruckend, aber Sie können dies tun, indem Sie eine TAGS-Datei analysieren.
Alternative

2
Was ich mag, ist Hippie-Expand ... es ist für mich zutiefst nützlicher als die Code-Vervollständigung.
Paul Nathan

2
@mathepic Und genau wie viele Leute wissen das zu tun?
TheLQ

2
Es ist beeindruckend, wenn Sie seit den Mainframe-Tagen programmiert haben.
AShelly

4
Jungs, wenn Sie diese Antwort nicht ansprechend finden, stimmen Sie stattdessen für eine andere Antwort ab, anstatt in den Kommentaren abzulehnen. Da es sich um eine subjektive Frage handelt, werden wahrscheinlich auch Antworten gegeben.
JBRWilkinson

16

Die Fähigkeit von ReSharper, zu erraten, was ich für eine Variable mit dem Namen haben möchte, erstaunt mich immer wieder. Hier ist ein sehr einfaches Beispiel, aber Sie bekommen die Idee.

Alt-Text


1
Können Sie bitte vielleicht einige Beispiele für diejenigen nennen, die es noch nie in Aktion gesehen haben (ich)
Serg

9
Wenn Ihr Texteditor Sie beim Schreiben von Code ersetzen kann, habe ich einige schlechte Nachrichten ...
P Shved

3
foreach(var matche in regex.Matches(str)). Setzt matcheauch objecteher als ein Match, nicht sehr nützlich.
Callum Rogers

1
@ Callum: Stimmt, aber das liegt nur daran, dass MatchCollectiones sich um eine untypisierte Sammlung handelt. Funktioniert varhervorragend für ordnungsgemäße Sammlungen . (Ich mag es aber immer noch nicht)
Konfigurator

1
Dies ist auch eine Funktion in Eclipse.
NimChimpsky

12

Ich war sehr beeindruckt von den Refactoring- Tools von Eclipse, als ich sie zum ersten Mal sah. Die Fähigkeit, Methoden (die beim Erlernen von besserem Design häufig vorkommen) aus einem großen Teil des Codes zu extrahieren und alles für mich zu erledigen, war ziemlich cool.


12

Code-Blasen. http://www.andrewbragdon.com/codebubbles_site.asp

Ich liebe Visual Studio und Eclipse für die Tools, mit denen ich Code ändern kann, aber Code Bubbles begeistert mich wirklich, dass ich in meinem Code navigieren und ihn anzeigen kann. Schade, dass es nicht öffentlich verfügbar ist = - {


2
Wow. Das Video ... ich sabbere. Kann ich das für C ++ haben, bitte?
sbi

Ich kann nichts sagen, aber wow.
Icode4food

1
+1 Obwohl ich die aktuelle GUI nicht mag, ist das Konzept selbst ziemlich erstaunlich ...
Tamara Wijsman

funktioniert das wirklich kleine Kästchen mit einem Teil des Codes. Um es zu benutzen, benötigen Sie einen Monitor, der die Größe einer Wand hat.
IAdapter

Ich hoffe, dass dies in Emacs nie implementiert wird. Mein linker kleiner Finger wird das nicht mögen.
Rightfold

7

Die beeindruckendste Programmierumgebung, von der ich je gehört habe, ist das Genera-Betriebssystem.

Sie können auf jedes Widget im Fenstersystem klicken und eine vollständige Anzeige des Quellcodes und der Dokumentation des Elements erhalten. Als dynamische Programmiersprache (Lisp) können Sie die Quelle des Widgets im Handumdrehen bearbeiten.

ZMACS aus der Lisp Machine-Welt gilt nach wie vor als besserer Editor als Emacs, eine Editorumgebung ohne Peer.


Mein erster Computerjob nach dem Studium war die Arbeit mit einer Symbolik-Workstation (unter Verwendung von Gattungen). Glauben Sie mir, es gibt einen Grund, warum es nicht aufgeholt hat!
FinnNk

3
Oh, mach weiter!
Mark C

Ja, ich würde gerne wissen, warum Genera nicht auch
aufgefangen hat

@FinnNk: Könntest du das vielleicht näher erläutern?
Paul Nathan

6

Visuelle Darstellung der Programmstruktur (Programme / Funktionen / Routinen / ...)

Alt-Text


Welcher Editor ist das?
Paul Nathan


Pech ... (Sie haben gerade eine E-Mail erhalten, als Sie den Screenshot aufgenommen haben.) Dies ist jedoch keine sehr fortgeschrittene Funktion. Sicher, es ist wahrscheinlich sehr nützlich, aber (überhaupt) nicht sehr "beeindruckend".
Andreas Rejbrand

@ Andreas Rejbrand - Sorry Andreas, aber welche Mail? Welcher Screenshot? Ich verstehe leider nicht, wovon du sprichst.
Turm

@Rook: Er spricht über das Bild in Ihrer Antwort und das kleine blaue Kästchen unten rechts, das eine E-Mail-Benachrichtigung von Outlook zu sein scheint. . .
Tim Goodman

4

Die Fähigkeit von ReSharper zur Umgestaltung. Ich kann sagen, dass ich hier hinter der Kurve stehe, da ich glaube, dass Java mit Eclipse diese Art von Funktionalität schon seit einiger Zeit bietet, aber ich arbeite nicht regelmäßig mit Java.

Die Delta-In-Fähigkeit, die ReSharper zu Visual Studio hinzufügt, ist so groß, dass es unglaublich ist. Ich weiß, dass ich wie eine Anzeige klinge, aber ich glaube nicht, dass ich jemals wieder eine Standardinstallation von Visual Studio ohne ReSharper verwenden könnte.

Allgemeiner gesagt, würde ein semantisches Verständnis des Codes einem normalen alten Texteditor jeden Tag die Nase voll schlagen. Dies führt zu Dingen wie "Verwendung von Variablen finden" oder "Inline-Funktion" oder "Möglichkeit, idiomatische Muster zu verwenden" usw.


Einmal sagte man mir bei der Arbeit: "Freunde lassen Freunde nicht ohne ReSharper programmieren."
Frank Shearar

4

Smalltalks Debugger:

  • Voller Zugriff auf den gesamten Aufrufstapel (Was war diese Instanzvariable des Objekts, das 3 Absender im Stapel abgelegt hat?)
  • Bearbeiten Sie den zu testenden Code im Debugger, starten Sie ihn neu und setzen Sie die Programmausführung fort, als wäre nichts passiert.

In Smalltalk ist es völlig normal, die meiste Zeit damit zu verbringen, Code aus dem Debugger heraus zu schreiben.

(Ich erinnere mich, dass ich überwältigt war, als ich eine Methode ausgeführt, etwas falsch gesehen, geändert und die Methode erneut ausgeführt habe, ohne die Anwendung damals mit Visual Age für Java neu gestartet zu haben ... weil VA4J in Visual Age für Smalltalk geschrieben wurde.)

Smalltalks Methodenfinder

Mit Method Finder können Sie fragen: "Welche Nachricht kann ich senden, um diese Parameter zu übernehmen und dieses Ergebnis zu erhalten?" Fragen Sie es 'abc'. 'def'. 'abcdeb'.und es sagt Ihnen 'abc' , 'def' --> 'abcdef'. Fragen Sie es #(0 1 2 3)und es heißt#(0 1 2 3) sum --> 6 . * Absender von, Implementierer von allem, um alle (*) Absender einer Nachricht oder alle Objekte zu finden, die diese Nachricht implementieren.

(*) Außer wenn Sie beispielsweise zur Laufzeit Nachrichtennamen erstellen: self perform: (#foo, #bar)um sich selbst die Nachricht zu senden #foobar- in diesem Fall wissen Sie, was Sie tun, und es macht Ihnen nichts aus, wenn Sie sich auf Ihren eigenen Petard setzen.


4

Whyline

Whyline für Java hat mich sehr beeindruckt, als ich es sah. Es ist ein dynamisches Analysetool, mit dem Sie Fragen zur Programmausgabe stellen können, nicht nur zu Text, sondern auch zu Grafiken. Sie können beispielsweise fragen, warum diese Linie rot war. oder "Warum wurde die Malmethode nicht aufgerufen?"

Es funktioniert, indem Sie Ihr Programm instrumentieren und einen Lauf aufzeichnen. Angenommen, es gibt einen Fehler, den Sie reproduzieren können. Sie instrumentieren Ihr Programm mit Whyline, führen Ihr Programm in Whyline aus, um den Fehler zu reproduzieren, und wenn Sie das Programm beenden, können Sie Whyline verwenden, um den Ausführungsverlauf zu überprüfen.

Diese Aufnahme und Wiedergabe ist nicht neu, aber wie Whyline sie implementiert, ist ziemlich raffiniert. Sie können den Verlauf nach bestimmten Ereignissen anzeigen (z. B. nur Mausbewegungsereignisse oder nur Tastendruckereignisse). Außerdem wird die Ausgabe mit dem Teil des Programms verknüpft, mit dem sie gedruckt wurde, sodass Sie von der Ausgabe zum Code navigieren können.

Zum Arbeiten wird das Programm-Slicing verwendet, sodass Sie sich auf die Teile des Codes konzentrieren können, die tatsächlich relevant sind. CMU hat jetzt ein Patent darauf, und ich weiß nicht, was ihre Pläne sind, aber ich hoffe, wir können mehr davon in der Produktion sehen. Es ist ein Gedächtnisschwein, aber das ist wahrscheinlich, weil es ein Prototyp ist und sich verbessern kann.

Sie sollten die Demo online sehen, aber Sie sollten sie auch selbst ausprobieren, um die volle Erfahrung zu erhalten. Die Online-Demos unterbieten die Idee.


3

Ich denke, das beeindruckendste IDE-Feature, das ich je gesehen habe, ist SyncEdit , das AFAIK nur in Delphi zur Verfügung stellt.


Ist das nicht nur das Umbenennen von Mitgliedern? Eclipse übernimmt dies direkt. Edit: Oh ich verstehe, du kannst es innerhalb einer Auswahl machen.
Matt Olenik

1
Eclipse hat es auch (benutze es die ganze Zeit). Nützlich - sehr. Magisch - nicht so sicher.
Serg

@ Serg: Oh, Eclipse hat es auch? Ich würde es nicht wissen. Ich benutze kein Java. Ich weiß, VS hat es nicht ...
Mason Wheeler

@Matt: Sie können dies innerhalb einer Auswahl tun, und da Sie dies innerhalb einer Auswahl tun können, können Sie dies über so viele Bereiche der Datei hinweg tun, wie Sie möchten. Es ist nicht durch den Umfang oder andere Einschränkungen beschränkt, die ein Refactoring-Parser für das Umbenennen von Mitgliedern festlegen würde.
Mason Wheeler

Netbeans hat das auch. In der Regel Strg-R.
Alan Pearce

2

Was ich in einer IDE sehen möchte, sind die folgenden Funktionen:

  • Zeigen Sie den Code so an, wie ich es gewohnt bin (unabhängig davon, wie er tatsächlich formatiert ist)
  • Ermöglichen das Einbetten von Tabellen (z. B. eine Excel-Tabelle, in der ich die Zellenwerte lesen kann sheet[A3]) und Zeichnungen in den Code und den Zugriff darauf wie auf jede Variable.
  • Lassen Sie geschweifte Klammern und anderen unnötigen Code weg, der nur dazu da ist, die Analyse glücklich zu machen.
  • Durchsuchen des Codes mit einer Google-ähnlichen Engine (insbesondere das Erhalten von Suchergebnissen innerhalb von 35 ms)
  • Darstellung komplexer Sachverhalte iftabellarisch (noch im Link suchen).
  • Refactoring-Tools, die ähnlichen Code finden, die Unterschiede extrahieren und auf das Maximum reduzieren.
  • Unterstützung für die Codegenerierung unter Einhaltung von Sprachregeln (Denken Sie daran: Erstellen Sie alle Getter und Setter für Java-Klassen, es sei denn, eine Methode mit demselben Namen ist bereits vorhanden oder von Annotationen abhängig).

"Erstellen Sie alle Getter und Setter für Java-Klassen, es sei denn, es gibt bereits eine Methode mit demselben Namen" Ich denke, Eclipse macht das ...
Hila

Sind die Ziele "Anzeigen des Codes wie gewohnt" und "Auslassen von geschweiften Klammern zulassen" kompatibel?
TRiG

@Hila: Ja aber der Code ist sichtbar . Was ich möchte, ist, dass der Compiler sie nur generiert, wenn er die Java-Quelle kompiliert. Ich möchte nicht, dass sie die Quelle überladen.
Aaron Digulla

@TRiG: IMHO gibt es eine große Überschneidung zwischen den beiden. Ich rücke meinen gesamten Code ein. Die Zahnspangen sind völlig unbrauchbar.
Aaron Digulla

Wenn die IDE möglicherweise geschweifte Klammern speichert, diese aber nicht anzeigt, könnte dies funktionieren.
TRiG

2

Typprüfung für dynamische Sprachen

Solange Ihr Code nicht zu "meta" wird, sollte eine IDE für Ruby oder Python eine Hintergrundaufgabe ausführen können, die:

  • Bestimmt für eine gegebene Funktion alle möglichen Klassen, die als Argumente übergeben werden
  • Stellt für diese Klassen sicher, dass sie auf alle von dieser Funktion aufgerufenen Methoden reagieren
  • Zeigt eine Liste der inkompatiblen Klassen mit den fehlenden Methoden an, die Sie implementieren müssen

Ich habe noch keine IDE gesehen, die dies tut.


Meinen Sie damit, dass Sie keine R / P-IDE gesehen haben, die diese oder eine andere IDE im Allgemeinen unterstützt?
Mark C

Ich habe das noch nie irgendwo gesehen, aber ich habe auch nicht wirklich genau hingeschaut.
AShelly

RoelTyper von Roel Wuyts und Chuck von Lex Spoon haben diese Art von Analyse für Squeak durchgeführt.
Frank Shearar

Dies müsste wahrscheinlich auf einer Art Typinferenzsystem aufbauen, auf einer Sprache, die niemals für Typinferenz entwickelt wurde.
Lie Ryan


2

Eclipse Auto Build ist die Funktion, die ich am meisten bewundere ... vor 7 Jahren. Jetzt halte ich es für selbstverständlich.


intellij bekommt dies erst in v12 fällig. Ziemlich das einzige, was Eclipse besser macht
NimChimpsky

2

Xcode 4 behebt Semikolons und Tippfehler und zeigt anhand von Pfeilen an, wie ein Fehler aufgetreten ist.

Z.B:

NSString *a = [[NSString alloc] init];
[a release];
int l = [a length];

Ein Pfeil von [a release]bis zeigt [a length]an, warum Sie ihn nicht verwenden können [a length].


Dieses Verhalten ist auf das Geräusch des statischen Analysators zurückzuführen. Sie können es als separaten Befehl ausführen und die Ausgabe in einem Browser anzeigen. Keine ausgefallenen Pfeile.
Will

1

Codevorlagen und -erweiterungen wie DevExpress CodeRush. In C # DependencyPropertyist das Erstellen von a ein großer Aufwand, da die Syntax sehr ausführlich sein kann. Wenn Sie jedoch einfach "dp" eingeben, wird ein Snippet angezeigt, in dem Sie Typ, Name und Standardwert eingeben und alles andere - einschließlich - erledigt ist Hinzufügen aller erforderlichen "using" -Anweisungen und möglicherweise von Projektreferenzen, wenn Speicher zur Verfügung steht.

Der Vorteil besteht darin, dass Sie Ihre eigenen Vorlagen für Code erstellen, den Sie häufig wiederverwenden oder neu schreiben, z. B. einfache Implementierungen von INotifyPropertyChangedEigenschaften. Geben Sie der Vorlage einfach den Namen und den Typ der gewünschten Eigenschaft (falls diese nicht von einem anderen Expander verarbeitet wurde) und der Rest wird erledigt, einschließlich der Erstellung der Sicherungsvariablen.


1

Pex macht eine ziemlich coole automatisierte Generierung von Komponententests . Es zeichnet Ihren Code nach, ermittelt Verzweigungspunkte, generiert mithilfe eines bedingten Lösers Eingaben, die auf jeden möglichen Zweig zutreffen, und lässt Sie dann die Ergebnisse als wiederholbare Komponententests exportieren. Es kann komplexen Code für den Umgang mit Zeichenfolgen demütigen.


Nett! Ich hoffe jedoch, dass es mehr für die Generierung von Testdaten als für den vollständigen Testfall verwendet wird ! [Testdaten + erwartete Ausgabe = Testfall.] Das heißt, das automatische Generieren der erwarteten Ausgabe bedeutet, dass nicht getestet wird, was Sie denken. Es müsste von jemandem überprüft werden, der die Spezifikation kennt.
Macneil

1

In Eclipse SEtters und Getters automatisch generieren erstellen Sie auf ähnliche Weise Methoden in implementierten Klassen über eine Schnittstelle


1

Die Unterstützung von JPA durch IntelliJ Idea

Erwähnen Sie, dass Sie eine DatabaseEntity haben:

@Entity
public class Customer{
[...]
String lasName;
[...]

jetzt hast du ein paar JPA-Abfragen

Query q = "selecct s from Customer c where c.lasName=:lastName"

Nach einiger Zeit sehen Sie, dass Sie in Ihrer Entität einen Tippfehler gemacht haben und sich dazu entschlossen haben, lasname in lastName umzugestalten .

Diese IDE wird auch die JPA-Abfrage umgestalten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.