Quelles sont les astuces les plus impressionnantes qu'un IDE pourrait réaliser avec le code? [fermé]


18

Les IDE modernes ont beaucoup d'astuces pour aider à l'écriture de code, à la refactorisation, à la recherche. Tous ces éléments sont très utiles, mais rarement aucun d'entre eux ne ressemble à une véritable «magie» et me fait penser «Wow! Comment cela a-t-il été compris?

Pouvez-vous nommer des fonctionnalités impressionnantes d'automatisation de code IDE (ou d'autres) qui vous ont époustouflé la première fois que vous les avez vues?


3
Bonne question, j'aimerais voir plus de réponses si ... Bounty!
Tamara Wijsman

Je ne sais pas si cela devrait être une réponse, mais pourquoi je ne vois aucune mention d' IntelliJ IDEA ?
Mark C

5
Les vrais programmeurs utilisent des papillons.
plié à droite

Empêchez-moi de créer des bugs;)
Travis Christian

cela ne devrait pas être fermé, c'est la question parfaite pour ici, à mon humble avis
NimChimpsky

Réponses:


29

Débogage arrière

Visual Studio 2010 (et maintenant 2012) me permet de déboguer vers l'arrière avec IntelliTrace.

Plus jamais je n'aurai à revivre le moment où j'ai frappé F10 une fois de plus et à recommencer le débogage.


2
Je ne l'ai pas encore utilisé, mais je le veux.
AShelly

Je ne l'ai pas utilisé non plus (j'utilise RAD Studio pour Delphi), mais cela ressemble à un rêve devenu réalité. (Mais est-ce une réponse valable à cette question? C'est plus une fonction de débogage qu'une fonction d'éditeur de code. Eh bien, cela fait partie de l'IDE, alors peut-être ...)
Andreas Rejbrand

+1000: C'est tellement utile.
Callum Rogers

A-t-il une commande COME FROM? :)
Joonas Pulakka

2
le problème est que vous ne pouvez le faire qu'avec des langages MS (gérés) et non avec C ++, par exemple
Ouvrez la voie

16

Compléter le code

Quand tout ce que vous avez vu est un éditeur de texte, c'est impressionnant


3
Pas vraiment impressionnant, vous pouvez le faire simplement en analysant un fichier TAGS.
alternative le

2
Ce que je aime est hippie-expand ... il est profondément plus utile pour moi que la complétion de code.
Paul Nathan

2
@mathepic Et exactement combien de personnes savent faire ça?
TheLQ

2
C'est impressionnant si vous programmez depuis les jours du mainframe.
AShelly

4
Les gars, si vous ne trouvez pas cette réponse attrayante, veuillez voter pour une autre réponse à la place, plutôt que d'être en désaccord dans les commentaires. C'est une question subjective, donc les réponses données le seront probablement aussi.
JBRWilkinson

16

La capacité de ReSharper à deviner ce que je veux une variable nommée continue de m'étonner. Voici un exemple très simple mais vous avez l'idée.

texte alternatif


1
Pouvez-vous s'il vous plaît donner des exemples pour ceux qui ne l'ont jamais vu en action (moi)
serg

9
Si votre éditeur de texte peut vous remplacer en écrivant du code, j'ai de mauvaises nouvelles ...
P Shved

3
foreach(var matche in regex.Matches(str)). Définit également matchecomme un objectplutôt qu'un Match, pas très utile.
Callum Rogers

1
@Callum: C'est vrai, mais c'est simplement parce qu'il MatchCollections'agit d'une collection non typée. Pour de bonnes collections, varfonctionne très bien. (Je n'aime toujours pas ça cependant)
configurateur

1
c'est aussi une fonction dans eclipse.
NimChimpsky

12

J'ai été très impressionné par les outils de refactoring d'Eclipse lorsque je les ai rencontrés pour la première fois. La possibilité d'extraire des méthodes (qui, lorsque vous apprenez une meilleure conception est un phénomène courant) à partir d'un gros morceau de code et de tout gérer pour moi était assez cool.


12

Bulles de code. http://www.andrewbragdon.com/codebubbles_site.asp

J'adore Visual Studio et Eclipse pour les outils qu'ils me donnent pour changer le code, mais Code Bubbles m'excite vraiment de pouvoir naviguer et afficher mon code. Dommage que ce ne soit pas accessible au public = - {


2
Sensationnel. Cette vidéo ... je bave. Puis-je avoir ceci pour C ++, s'il vous plaît?
sbi

Je ne peux rien dire mais wow.
Icode4food

1
+1 Bien que je n'aime pas l'interface graphique actuelle, le concept lui-même est assez étonnant ...
Tamara Wijsman

ça marche vraiment? petites boîtes avec une partie du code. Pour l'utiliser, vous auriez besoin d'un moniteur de la taille d'un mur.
IAdapter

J'espère que cela ne sera jamais implémenté dans Emacs. Mon petit doigt gauche n'aimera pas ça.
plié à droite le

7

L'environnement de programmation le plus impressionnant dont j'ai jamais entendu parler est le système d'exploitation Genera.

Vous pouvez cliquer sur n'importe quel widget du système de fenêtrage et obtenir une lecture complète du code source et de la documentation de l'article. Étant un langage de programmation dynamique (Lisp), vous pouvez modifier la source du widget à la volée.

ZMACS du monde Lisp Machine est toujours considéré comme un meilleur éditeur que Emacs, qui est un environnement d'éditeur sans homologue.


Mon premier emploi en informatique après l'université a été de travailler avec une station de travail symbolique (utilisant des genres), croyez-moi, il y a une raison pour laquelle ça n'a pas marché!
FinnNk

3
Oh, élaborez!
Mark C

oui, j'aimerais savoir pourquoi Genera n'a pas aussi bien
compris

@FinnNk: Peut-être pourriez-vous élaborer?
Paul Nathan

6

Affichage visuel de la structure du programme (programmes / fonctions / routines / ...)

texte alternatif


De quel éditeur s'agit-il?
Paul Nathan


Pas de chance ... (Vous avez reçu du courrier au moment même où vous avez pris la capture d'écran.) Mais ce n'est pas une fonctionnalité très avancée. Bien sûr, c'est probablement très utile, mais pas très "impressionnant" (du tout).
Andreas Rejbrand

@Andreas Rejbrand - Désolé Andreas, mais quel courrier? Quelle capture d'écran? J'ai bien peur de ne pas comprendre de quoi vous parlez.
Tour

@Rook: Il parle de l'image dans votre réponse et de la petite boîte bleue en bas à droite qui semble être une notification par courrier électronique d'Outlook. . .
Tim Goodman

4

Capacité de ReSharper à refactoriser. En toute divulgation, je suis peut-être derrière la courbe ici car je pense que Java avec Eclipse a ce type de fonctionnalité depuis un certain temps, mais je ne travaille pas régulièrement avec Java.

Le delta de capacité que ReSharper ajoute à Visual Studio est si grand, c'est incroyable. Je sais que je ressemble à une annonce, mais je ne pense pas que je pourrais revenir à l'utilisation d'une installation Visual Studio standard sans ReSharper.

Plus généralement, une compréhension sémantique du code ferait battre le pantalon d'un ancien éditeur de texte ordinaire. Cela conduit à des choses comme "trouver les usages de la variable" ou "la fonction en ligne" ou "la possibilité d'utiliser un modèle idiomatique", etc.


On m'a dit une fois au travail: "Les amis ne laissent pas leurs amis programmer sans ReSharper."
Frank Shearar

4

Débogueur de Smalltalk:

  • Accès complet à toute la pile d'appels (Quelle était cette variable d'instance de cet objet 3 expéditeurs dans la pile?)
  • Modifiez le code testé dans le débogueur, redémarrez et poursuivez l'exécution du programme comme si de rien n'était.

Il est parfaitement normal dans Smalltalk de passer la plupart de son temps à écrire du code depuis le débogueur.

(Je me souviens d'avoir été époustouflé en exécutant une méthode, en voyant quelque chose de mal, en la changeant et en exécutant à nouveau la méthode sans redémarrer l'application dans la journée avec Visual Age pour Java ... car VA4J a été écrit en Visual Age pour Smalltalk.)

Outil de recherche de méthodes de Smalltalk

Le Finder de méthodes vous permet de demander "quel message puis-je envoyer pour prendre ces paramètres et obtenir ce résultat?" Demandez-le 'abc'. 'def'. 'abcdeb'.et il vous le dira 'abc' , 'def' --> 'abcdef'. Demandez-le #(0 1 2 3)et ça dit #(0 1 2 3) sum --> 6. * Expéditeurs-de, implémenteurs-de tout vous pour trouver tous (*) les expéditeurs d'un message ou tous les objets qui implémentent ce message.

(*) Sauf lorsque vous faites des choses comme créer des noms de message lors de l'exécution: self perform: (#foo, #bar)pour vous envoyer le message #foobar- dans ce cas, vous savez ce que vous faites, et cela ne vous dérange pas le potentiel de vous hisser sur votre propre pétard.


4

Whyline

Whyline pour Java m'a vraiment impressionné quand je l'ai vu. C'est un outil d'analyse dynamique qui vous permet de poser des questions sur la sortie du programme, et pas seulement du texte, mais aussi des graphiques. Par exemple, vous pouvez demander "pourquoi cette ligne était-elle rouge?" ou "pourquoi la méthode de peinture n'a-t-elle pas été appelée?"

Il fonctionne en instrumentant votre programme et en enregistrant un run. Par exemple, supposons qu'il existe un bogue que vous pouvez reproduire. Vous instrumentez votre programme avec Whyline, exécutez votre programme dans Whyline pour reproduire le bogue, puis lorsque vous quittez le programme, vous pouvez utiliser Whyline pour inspecter l'historique d'exécution.

Cet enregistrement et cette lecture ne sont pas nouveaux, mais la façon dont Whyline l'implémente est assez simple. Vous pouvez afficher l'historique en fonction d'événements spécifiques (par exemple, en se concentrant uniquement sur les événements de glissement de la souris ou uniquement sur les événements de touches). Il associe également la sortie à la partie du programme qui l'a imprimée, afin que vous puissiez naviguer de la sortie au code.

Pour fonctionner, il utilise le découpage de programme, afin que vous puissiez vous concentrer sur les parties du code qui sont réellement pertinentes. La CMU a maintenant un brevet dessus, et je ne sais pas quels sont leurs plans, mais j'espère que nous pourrons en voir plus en production. C'est un porc de mémoire, mais c'est probablement parce que c'est un prototype et qu'il peut s'améliorer.

Vous devriez voir la démo en ligne, mais vous devriez également l'essayer par vous-même pour obtenir l'expérience complète. Si quoi que ce soit, les démos en ligne sous-vendent l'idée.


3

Je pense que la fonctionnalité IDE la plus impressionnante que j'ai vue est SyncEdit , qui AFAIK n'est disponible que dans Delphi.


N'est-ce pas simplement renommer les membres? Eclipse le fait sur place. Edit: Oh je vois, vous pouvez le faire dans une sélection.
Matt Olenik

1
Eclipse l'a également (utilisez-le tout le temps). Utile - très. Magique - pas si sûr.
serg

@Serg: Oh, Eclipse l'a aussi? Je ne sais pas; Je n'utilise pas Java. Je sais que VS ne l'a pas ...
Mason Wheeler

@Matt: Vous pouvez le faire dans une sélection, et parce que vous pouvez le faire dans une sélection, vous pouvez le faire sur autant de fichiers que vous le souhaitez. Il n'est pas limité par la portée ou d'autres contraintes qu'un analyseur de refactorisation placerait sur le changement de nom des membres.
Mason Wheeler

Netbeans a cela aussi. Habituellement ctrl-r.
Alan Pearce

2

Ce que j'aimerais voir dans un IDE, ce sont ces fonctionnalités:

  • Afficher le code de la façon dont je suis habitué (indépendamment de la façon dont il est réellement formaté)
  • Permettre d'incorporer des tableaux (par exemple une feuille de calcul Excel où je peux lire les valeurs des cellules sheet[A3]) et des dessins dans le code et y accéder comme n'importe quelle variable.
  • Permet d'omettre les accolades et autres codes inutiles qui sont juste là pour rendre l'analyse heureuse.
  • Recherche du code avec un moteur de type Google (en particulier pour obtenir des résultats de recherche dans les 35 ms)
  • Affichage complexe if conditions sous forme de tableau (recherche toujours le lien).
  • Outils de refactoring qui peuvent trouver du code similaire, extraire les différences et les réduire au maximum.
  • Prise en charge de la génération de code tout en respectant les règles de langage (pensez: créez tous les getters et setters pour les classes Java sauf si une méthode du même nom existe déjà ou dépend des annotations)

"Créez tous les getters et setters pour les classes Java à moins qu'une méthode du même nom n'existe déjà" Je pense qu'eclipse fait ça ...
Hila

Les objectifs "Afficher le code comme d'habitude" et "Autoriser l'omission des accolades" sont-ils compatibles?
TRiG

@Hila: Oui mais le code est visible . Ce que j'aimerais, c'est que le compilateur les génère simplement lorsqu'il compile la source Java; Je ne veux pas qu'ils encombrent la source.
Aaron Digulla

@TRiG: À mon humble avis, il y a un grand chevauchement entre les deux. J'ai mis en retrait tout mon code; les accolades sont complètement inutiles.
Aaron Digulla

Si, peut-être, l'EDI enregistre les accolades mais ne les affiche pas, cela pourrait fonctionner.
TRiG

2

Vérification de type pour les langues dynamiques

Tant que votre code n'est pas trop «méta», un IDE pour Ruby ou Python devrait pouvoir exécuter une tâche en arrière-plan qui:

  • pour une fonction donnée, détermine toutes les classes possibles qui seront passées en arguments
  • pour ces classes, assure qu'elles répondent à toutes les méthodes invoquées par cette fonction
  • présente une liste des classes incompatibles avec les méthodes manquantes que vous devez implémenter

Je n'ai pas encore vu d'IDE qui fasse ça.


Voulez-vous dire que vous n'avez pas vu d'IDE R / P qui fait cela ou n'importe quel IDE en général?
Mark C

Je n'ai jamais vu ça nulle part, mais je n'ai pas non plus regardé très fort.
AShelly

RoelTuyper de Roel Wuyts et Chuck de Lex Spoon ont fait / font ce genre d'analyse pour Squeak.
Frank Shearar

Cela devrait probablement être construit sur une sorte de système d'inférence de type, sur un langage qui n'a jamais été conçu pour l'inférence de type.
Lie Ryan


2

La construction automatique d'Eclipse est la fonctionnalité que j'admire le plus ... il y a 7 ans. Maintenant, je le prends pour acquis.


intellij ne fait que l'obtenir en v12. À peu près la seule chose que l'éclipse fait mieux
NimChimpsky

2

Xcode 4 corrige les points-virgules et les fautes de frappe et utilise des flèches pour montrer comment une erreur s'est produite.

Par exemple:

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

Une flèche sera tirée de [a release]à [a length]pour montrer pourquoi vous ne pouvez pas l'utiliser [a length].


Ce comportement est dû à l'analyseur statique de clang. Vous pouvez l'exécuter en tant que commande distincte et afficher la sortie dans un navigateur. Pas de flèches fantaisistes cependant.
Will

1

Modèles de code et expansion, tels que CodeRush de DevExpress. En C #, a DependencyPropertyest une difficulté majeure à créer, car la syntaxe peut devenir verbeuse, mais en tapant simplement "dp", vous obtenez quelque chose qui ressemble à un extrait de code où vous remplissez le type, le nom et la valeur par défaut, et tout le reste est fait - y compris ajouter toutes les instructions "using" nécessaires, et éventuellement des références de projet si la mémoire est suffisante.

L'avantage est de créer vos propres modèles, pour le code que vous réutilisez ou réécrivez souvent, comme les implémentations simples de INotifyPropertyChangedpropriétés, où donnez simplement au modèle le nom et le type de la propriété (si un autre expanseur ne l'a pas gérée) que vous souhaitez utiliser , et il gère le reste, y compris la création de la variable de support.


1

Pex fait une génération de tests unitaires automatisés plutôt cool. Il trace votre code, détermine les points de branchement, utilise un solveur conditionnel pour générer des entrées qui atteignent chaque branche possible, puis vous permet d'exporter les résultats sous forme de tests unitaires répétables. Il peut humilier du code de gestion de chaîne complexe.


Agréable! Cependant, j'espère qu'il sera plus utilisé pour la génération de données de test plutôt que pour le cas de test complet ! [Données de test + Sortie attendue = Cas de test.] Autrement dit, la génération automatique de la sortie attendue signifie qu'elle ne teste pas réellement ce que vous pensez être. Il devrait être vérifié par quelqu'un qui connaît les spécifications.
Macneil

1

Dans Eclipse, générer automatiquement des SEtters et des getters, créer de la même manière des méthodes dans la classe implements à partir d'une interface


1

IntelliJ Idea soutient JPA

Mentionnez que vous avez une DatabaseEntity:

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

vous avez maintenant quelques requêtes JPA

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

après un certain temps, vous voyez que vous avez fait une faute de frappe au sein de votre entité et que vous décidez de refactoriser lasname en lastName .

Cet IDE va ​​également refactoriser la requête JPA.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.