web-dev-qa-db-fra.com

Eclipse: refactorisations les plus utiles

De temps en temps, j'utilise la fonction de refactoring Eclipse. Certaines techniques sont plus évidentes que d'autres et d'autres que je n'ai jamais essayées.

Quelle refactorisation vous est la plus utile et pourquoi?

Remarque: Je trouve cette présentation très utile, peut-être parce qu'elle est basée sur des exemples et donc facile à comprendre:

" Refactoring pour tout le monde - Comment et pourquoi utiliser les fonctionnalités de refactoring automatisé d'Eclipse "

Edit: Cet article est également utile (Merci gigue)

Explorez les fonctions de refactoring dans Eclipse JDT

44
Adrian

C'est une question intéressante. Je sais ce qui fonctionne pour moi et il est intéressant de voir ce que les autres utilisent.

J'ai décidé d'adopter une approche plus scientifique pour déterminer les commandes de refactoring les plus utilisées. Eclipse a une fonction sage Data Collector (UDC) intégrée. Les données sont accessibles au public . J'ai pris les données et extrait le graphique suivant qui montre les commandes d'édition les plus couramment utilisées (sans commandes de navigation).

texte alternatif http://img.skitch.com/20091207-bmcng36rjy837sqmcx58b85age.gif

Cependant, je suis un fervent partisan des "Actions de sauvegarde" pour le formatage et l'organisation des importations (lire mon article à ce sujet ), donc je ne les compterais pas. Je voudrais également supprimer les actions de commentaire. L'image ressemble à ceci: texte alternatif http://img.skitch.com/20091207-ieas1mk5114fwitucqkqxyw6t.gif

52
zvikico

Renommer - parce que donner aux choses des noms significatifs est la meilleure façon d'écrire du code auto-documenté. Shift+Alt+R

Extraire la méthode - chaque fois qu'une méthode devient trop longue. Shift+Alt+M

Extraire constante - parce que les nombres magiques sont mauvais. Shift+Alt+T (menu refactoring, il n'y a pas de raccourci direct).

Inline/introduire une variable - pour supprimer l'encombrement des méthodes. Shift+Alt+I (en ligne), Shift+Alt+L (présenter)

30
abyx

Mes favoris (par ordre d'utilisation):

  1. Renommer (Alt-Shift-R, ou Ctrl-1 pour un changement de nom plus rapide dans le fichier)
    Bon changement de nom des variables, méthodes, etc. sans effets secondaires.
  2. Extraire la variable (Ctrl-1, Alt-Shift-L)
    Idéal pour diviser une ligne de 100 caractères rapide en plusieurs étapes.
  3. Méthode d'extraction (Alt-Shift-M)
    Créez une méthode à partir d'un code sans aucun effet secondaire.
  4. Déclaration de variable fractionnée (Ctrl-1)
    Bien lorsque vous initialisez une variable à la déclaration et découvrez maintenant que l'initialisation doit être dans un bloc try ou if.
  5. Modifier la signature de la méthode (Alt-Shift-C)
    Le couteau suisse pratique de manipulation de signature de méthode, y compris les valeurs par défaut pour les nouveaux paramètres.
  6. Pull Up/Push Down Pull méthodes et variables vers une interface générique ou super-classe ou Push-down vers une sous-classe
  7. Extraire l'interface/superclasse
    Extraire une interface ou une superclasse de la classe actuelle. Très utile.
20
Hardcoded

Mes favoris:

  1. Renommer
  2. Tirer vers le haut/pousser vers le bas
  3. Extraire la méthode
7
Andreas_D

Les refactorings les plus populaires ont été indiqués, et je suis entièrement d'accord avec eux.

Formateur de code ( Source , Format ou CtrlShiftF) est l'une des fonctionnalités du IDE que j'utilise très souvent. Certes, il ne s'agit pas de refactoring, mais il améliore la lisibilité du code tout en conservant votre style de codage: dirigez-vous simplement vers Préférences , Java , Style de code , Formateur et dites à Eclipse à quoi vous voulez que votre code ressemble!

Générer des Getters et des Setters est également une fonctionnalité que je trouve pour gagner du temps lors de l'écriture de Java beans).

4
Paul Lammertsma

Eclipse a peut-être le moins de refactorings pour tous les IDE populaires. Vous pourriez envisager Netbeans ou IntelliJ (l'édition communautaire est gratuite). Inversement, Eclipse a probablement le meilleur débogueur. ;)

J'utilise le refactoring lorsque j'écris le code (que j'ai trouvé accélère l'écriture d'environ 15%), donc la capacité d'IntelliJ à refactoriser du code qui ne compile pas très utile pour moi. Les autres IDE peuvent prendre en charge cela maintenant (quelqu'un le sait-il?) Je trouve que l'intelligent complete d'IntelliJ est également un peu plus intelligent.

J'ai testé retaper un fichier à partir de l'impression (écrit à l'origine dans Eclipse) et j'ai constaté que j'utilisais 30% de touches en moins et 50% de mouvements de souris en moins lors de la frappe du fichier avec IntelliJ (par rapport à Eclipse) .J'estimerais que Netbeans se situe quelque part au milieu.

3
Peter Lawrey

Mes favoris sont:

1) Renommer - Cela fonctionne sur les noms de méthode, les noms de variables, les noms de classe, les champs - vraiment n'importe quoi avec un nom.
2) Convertir une classe anonyme en classe imbriquée - Aide au débogage, vous permet de réutiliser une logique (comme un comparateur) que vous pensiez seulement utiliser au même endroit.
3) Convertir le type de membre au niveau supérieur - Souvent, après avoir transformé une classe anonyme en classe imbriquée, je découvre que la classe est utile ailleurs. Cette refactorisation est alors parfaite.

2
Spina

CTRL + 1 sur une section bordée de rouge, c'est-à-dire une solution rapide.

1
jeff porter

J'aime la méthode d'extraction (Alt+Shift+M), et depuis 3.6M1 , il gère désormais les sélections qui contiennent des instructions continue.

Pour conserver la sémantique du code existant, la sélection doit inclure la dernière instruction de la boucle. Dans la méthode extraite, les instructions continue sont modifiées pour renvoyer:

Extraire la refactorisation de la méthode avec continue http://download.Eclipse.org/Eclipse/downloads/drops/S-3.6M1-200908061400/images/extract-method-continue.png

Pour une sélection qui nécessiterait plusieurs valeurs de retour dans la méthode extraite, Eclipse répertorie désormais les variables en conflit dans le message d'erreur:

Extraire la refactorisation de la méthode avec une erreur de valeur de retour ambiguë http://download.Eclipse.org/Eclipse/downloads/drops/S-3.6M1-200908061400/images/extract-method-multiple-return-values.png

1
VonC

Ce que j'utilise le plus, c'est Renommer, Extraire la méthode et Changer la signature de la méthode, dans cet ordre.

1
Yishai

Il vaut également la peine de lire cette recherche: Comment évolue l'API? Une histoire de refactoring. par D. Dig et R. Johnson.

Les auteurs ont remarqué que 80% des changements étaient des refactorings et les ont classés. Voici le résumé:

Les frameworks et les bibliothèques modifient leurs API. La migration d'une application vers la nouvelle API est fastidieuse et interrompt le processus de développement. Bien que certains outils et idées aient été proposés pour résoudre l'évolution des API, la plupart des mises à jour sont effectuées manuellement. Pour mieux comprendre les exigences des outils de migration, nous avons étudié les changements d'API de quatre frameworks et d'une bibliothèque. Nous avons découvert que les changements qui cassent les applications existantes ne sont pas aléatoires, mais ont tendance à tomber dans des catégories particulières. Plus de 80% de ces changements sont des refactorings. Cela suggère que des outils de migration basés sur le refactoring devraient être utilisés pour mettre à jour les applications.

0
ewernli

J'utilise :

1- Renommer - pour corriger un meilleur nom de méthode

2- Déplacer - pour mieux organiser mon package, comme lorsque je démarre mon projet, il était si petit donc pas besoin d'un package io, mais maintenant oui.

3- Générer des commentaires -Lorsque je crée un .class, évitez-moi de recopier la licence GPL, etc.

4- Indentation correcte - pour que mon code reste lisible.

0
Nettogrof