Java équivalent à #region en C #


489

Je veux utiliser des régions pour le pliage de code dans Eclipse ; comment cela peut-il être fait en Java?

Un exemple d'utilisation en C # :

#region name
//code
#endregion

@MichaelLaVoie: la réponse a été supprimée. Y a-t-il une chance qu'il soit déplacé vers un autre site SE?
Adam Parkin du


J'ai rejoint la fête tard. Je suis d'accord avec IKashef qu'il existe d'autres options que la réponse actuellement sélectionnée. La réponse de Yaqub Ahmad m'a sauvé la vie. Je n'avais pas besoin de télécharger Intellig IDE. J'ai téléchargé le plugin CoffeeBytes mentionné à partir du commentaire de cking24343, j'ai appliqué la configuration de 'null n void' et j'ai bien fonctionné dans Luna. Vous devez redémarrer après avoir appliqué la configuration
Maximus Decimus

3
commencer //region [Description] et terminer avec//endregion
Amir Ziarati

Réponses:


216

Il n'y a pas d' équivalent standard . Certains IDE - Intellij, par exemple, ou Eclipse - peuvent se plier en fonction des types de code impliqués (constructeurs, importations, etc.), mais il n'y a rien de tel #region.


30
En fait, cela peut être réalisé. Si vous faites défiler vers le bas sur ce post "Yaqub Ahmad" explique comment obtenir cette fonctionnalité. Voici également un lien ( kosiara87.blogspot.com/2011/12/… ) qui vous montre comment l'ajouter à votre environnement d'éclipse existant ... extrêmement utile!
cking24343

14
Sûr. Mais il n'y a rien de standard . Il est exécuté dans des IDE plutôt que d'avoir une construction de langage (ou de texte)
Brian Agnew

2
@lKashef - alors quel est alors l' équivalent standard ? Tout ce qui est noté ci-dessous concerne un IDE particulier, n'est-ce pas?
Brian Agnew

4
@BrianAgnew, l'OP n'a rien mentionné au sujet des normes au lieu de cela, il veut juste pouvoir avoir des blocs de type régions dans son code. Par exemple, vous avez dit "mais rien de tel que #region". dans IDEA par exemple // region .. // endregion fonctionne exactement comme #region. Il n'y a aucun moyen standard de le faire du tout, car cela dépend de l'IDE lui-même ou d'un plugin. Les développeurs ayant des antécédents Microsoft verront toujours MS Visual Studio comme "l'" IDE, mais en fait ce n'est qu'une des options et un autre IDE peut ou non implémenter une telle fonctionnalité.
Mazen Elkashef

4
@BrianAgnew, j'ai presque abandonné jusqu'à ce que je voie les réponses des autres qui ont aidé plus que les vôtres. Sérieusement pas de ressentiment ici, nous sommes tous ici pour apprendre et partager nos connaissances et je déclare que ma réponse m'a induit en erreur, peut-être que c'était une bonne réponse en 2010 mais pas aujourd'hui. J'espère que vous comprenez mon point.
Mazen Elkashef

476

Jet Brains IDEA a cette fonctionnalité. Vous pouvez utiliser le raccourci clavier surround pour cela (ctrl + alt + T). C'est juste une fonctionnalité IDEA.

Les régions ressemblent à ceci:

//region Description

Some code

//endregion

3
Merci pour ça! Fonctionne parfaitement sur Android Studio.
rogcg

2
La question demande clairement une solution pour Eclipse.
Duncan Jones du

5
@Duncan 1. Rien de mal à montrer aux gens qu'il existe des alternatives. 2. Je recherche les régions sous Intellij et je l'ai trouvé.
BHuelse

2
Sous Linux, ce raccourci exécute le terminal
user1209216

1
Je viens de l'essayer et il semble qu'IntelliJ supporte également les régions imbriquées! Dommage que ce ne soit pas standard.
Gruber

209

Avec Android Studio, essayez ceci:

//region VARIABLES
private String _sMyVar1;
private String _sMyVar2;
//endregion

Attention: pas de ligne vide après // région ...

Et vous obtiendrez:


passait par toutes les réponses et pensait qu'Android Studio est basé sur IntelliJ, cela doit être pris en charge. bonne chose à signaler cependant!
serine

5
bummi, je l'ai essayé en 0.4.2 avec une ligne vierge et fonctionne toujours
serine

2
Juste un commentaire / conseil (et en aucun cas une réponse à votre question). Il est largement admis que les régions doivent être évitées, car elles vous permettent de masquer la complexité des classes au lieu de travailler sur votre style de codage. Au lieu d'énormes classes, où chaque classe est responsable de beaucoup de fonctionnalités, travaillez plutôt à diviser votre code en classes plus petites. Cela rendra votre code plus facile à gérer au fil du temps. En savoir plus ici: blog.codinghorror.com/the-problem-with-code-folding
Daniel Saidi

5
@DanielSaidi oh, l'horreur! :) le gars dans l'article " Je ne vois rien! Je dois développer manuellement ces sections pour parcourir le code de cette classe. " ... donc parce qu'il est trop paresseux pour appuyer sur une touche (qui développerait tout sections du fichier), la fonctionnalité ne doit pas être utilisée - c'est une fonctionnalité super merveilleuse. En ce moment, je l'utilise pour masquer une à une les méthodes que j'ai vérifiées et qui sont thread-safe dans la classe sur laquelle je travaille, cela aide vraiment à rester organisé. Je pensais qu'il était là, mais c'est un petit prix à payer ...
ycomp

4
@DanielSaidi Il ne s'agit pas de masquer la complexité mais de masquer le code banal tel que les déclarations de variables, les getters, le code d'initialisation, etc. Notez également que vous n'avez PAS besoin de #regions pour réduire le "code complexe" trouvé dans les fonctions et les classes. Le boeuf avec des programmeurs utilisant un outil de manière incorrecte ne revient pas à "l'outil est mauvais".
user1567453

96

Pas d'équivalent dans la langue ... Basé sur les IDE ...

Par exemple dans les netbeans:

NetBeans / Creator prend en charge cette syntaxe:

// <editor-fold defaultstate="collapsed" desc="Your Fold Comment">
...
// </editor-fold>

http://forums.java.net/jive/thread.jspa?threadID=1311


1
Même si ce n'est pas un pliage spécifique à une langue, il m'a quand même aidé dans NetBeans. Exactement ce que je voulais réaliser. Je veux juste que mon code soit plus pratique et organisé pour moi.
Indigo

Y a-t-il un raccourci qui peut remplir automatiquement cette ligne?
Pini Cheyni

1
@ pini-cheyni - ui.netbeans.org/docs/ui/code_folding/cf_uispec.html a des raccourcis disponibles pour le pliage ....
Kevin LaBranche

@JadChahine: L'OP a posé des questions sur Eclipse, mais convenez que cela fonctionne bien pour NetBeans. La syntaxe est un peu maladroite mais le copier-coller le rend assez facile.
AlainD

50

7
+1 merci pour cette info. Étant donné que le site Web d'origine du développeur du plugin n'est plus disponible en 2012 - j'ai trouvé une brève description pour l'installation et l'utilisation .
k3b

quelqu'un a-t-il trouvé une alternative intelligente?
philx_x

Le lien de téléchargement n'existe plus.
derHugo

49

La fonction de pliage de code personnalisé peut être ajoutée à éclipse à l'aide du plug-in de pliage de code CoffeeScript.

Ceci est testé pour fonctionner avec eclipse Luna et Juno. Voici les étapes

  1. Téléchargez le plugin ici

  2. Extraire le contenu de l'archive

  3. Copiez collez le contenu du dossier du plugin et des fonctionnalités dans le même dossier nommé dans le répertoire d'installation d'Eclipse
  4. Redémarrez l'éclipse
  5. Naviguer Window >Preferences >Java >Editor >Folding >Select folding to use: Coffee Bytes Java >General tab >Tick checkboxes in front of User Defined Fold

    entrez la description de l'image ici

  6. Créez une nouvelle région comme indiqué:

    entrez la description de l'image ici

  7. Redémarrez Eclipse.

  8. Essayez si le pliage fonctionne avec des commentaires préfixés avec des identificateurs de début et de fin spécifiés

    entrez la description de l'image ici

    entrez la description de l'image ici

Vous pouvez également télécharger des archives et trouver des étapes sur ce blog .


2
ne fonctionne pas pour moi sur eclipse neon: le copier-coller n'a rien fait: la seule chose qui a changé était sous marketplace >> plugins installés >> mise à jour. J'ai mis à jour le plugin coffeeScript, mais je n'ai pas obtenu l'option "Sélectionner le pliage à utiliser" sous java >> éditeur >> pliage
Angelo Oparah

Cela a fonctionné dans l'oxygène Eclipse, mais vous devez redémarrer l'éclipse à nouveau. L'icône qui m'a été affichée était une icône rouge, j'ai donc changé de configuration, Fenêtre → Préférence → Java → Éditeur → Pliage, cliquez sur l' onglet Avancé et changez le thème de l'icône défini sur Moderne
Michieru

38

Il s'agit plus d'une fonction IDE que d'une fonction de langue. Netbeans vous permet de définir vos propres définitions de pliage en utilisant la définition suivante:

// <editor-fold defaultstate="collapsed" desc="user-description">
  ...any code...
// </editor-fold>

Comme indiqué dans l'article, cela peut également être pris en charge par d'autres éditeurs, mais il n'y a aucune garantie.


Dans Android studio, au moins, vous ne pouvez pas plier une partie d'un bloc. Si la spécification de pliage commence à l'extérieur d'un bloc et se termine à l'intérieur d'un bloc, elle ne s'activera pas.
Prof Von Lemongargle

30

le moyen le plus rapide Android Studio(ou IntelliJ IDEA)

  1. highlight the code tu veux l'entourer
  2. appuyez sur ctrl+ alt+t
  3. appuyez sur c==> puis entrez la description
  4. prendre plaisir

// region <name> Votre code ... // endregion Est plus simple et plus efficace! hehe; P
diegodsp

30

AndroidStudiorégion
Créer une région

Tout d'abord , trouvez (et définissez un raccourci si besoin) pour le Surround Withmenu entrez la description de l'image ici

Ensuite , sélectionnez le code, appuyez sur Ctrl+Alt+Semicolon-> choisissezregion..endregion...
entrez la description de l'image ici

Aller à la région

Tout d'abord, trouvez Custom Foldingun raccourci
entrez la description de l'image ici Deuxièmement, de n'importe où dans votre code, appuyez surCtrl+Alt+Period('>' on keyboard) entrez la description de l'image ici


20

Contrairement à ce que la plupart publient, ce n'est PAS une chose IDE. C'est une affaire de langage. La #region est une instruction C #.


55
Ce que la plupart affichent, c'est qu'en JAVA, c'est une fonctionnalité IDE.
WhyNotHugo

1
Je vois les 2 réponses les plus populaires disant qu'il n'y a pas une telle fonctionnalité de langue. -1.
Mohayemin

23
En C #, c'est en partie IDE, en partie langage. Le langage prend en charge les directives du préprocesseur, mais le préprocesseur les ignore simplement (de la même manière que le processeur ignore les commentaires). L'IDE (Visual Studio) les utilise pour effectuer le pliage de code.
ADTC

Java n'a pas spécifié de pliage de code que l'IDE (Netbeans) a, Netbeans a plus de commentaires spéciaux comme "TODO" et plus encore. Ils sont très utiles pour suivre vos progrès à travers le processus de développement de projet SW
Pini Cheyni

17

Je venais de C # vers java et j'ai eu le même problème et l'alternative la meilleure et exacte pour la région est quelque chose comme ci-dessous (travaillant dans Android Studio, je ne sais pas sur intelliJ):

 //region [Description]
 int a;
 int b;
 int c;
//endregion

le raccourci est comme ci-dessous:

1- sélectionnez le code

2- appuyez sur ctrl+ alt+t

3- Appuyez cet écrivez votre description


Dans la version 2.3.1 d'AndroidStudio, il se plie. Je ne sais pas quand ça a commencé à plier.
MiguelSlv

Merci. Fonctionne parfaitement dans Android Studio 3.0 beta 2. Par curiosité, j'ai essayé dans Eclipse Oxygen, cela ne fonctionne pas par défaut mais n'a pas cherché plus loin.
Laurent

15

Le meilleur moyen

//region DESCRIPTION_REGION
int x = 22;
// Comments
String s = "SomeString";
//endregion;

Astuce: mettez ";" à la fin de la "endregion"


1
eclipse ne plie pas le code, quel IDE utilisez-vous?
Ohad Cohen

Il fonctionne avec Android Studio et IntelliJ IDEA (les deux sont fabriqués à partir de la même base de code par JetBrains)
prashu132

IDE
signifie

12

Si quelqu'un est intéressé, dans Eclipse, vous pouvez réduire toutes vos méthodes, etc. en une seule fois, faites un clic droit lorsque vous insérez normalement un point d'arrêt, cliquez sur 'Pliage'> 'Tout replier'. Il sait que ce n'est pas une réponse à la question, mais simplement une alternative au pliage de code rapide.


1
Vous pouvez également demander à Eclipse de tout réduire automatiquement lors de l'ouverture d'un fichier de code source. Préférences> Java> Editeur> Pliage> "Plier initialement ces éléments" (cochez tout dans la liste). Je trouve pratique de me concentrer uniquement sur ce dont j'ai besoin, en particulier dans les fichiers de code source longs.
ADTC

@ADTC - Merci - tant de centaines de fois que je l'ai fait manuellement chaque fois que j'ouvre un fichier - plus jamais !!
ToolmakerSteve

@ToolmakerSteve Si vous pouvez faire quelque chose de répétitif manuellement sur un ordinateur, il doit juste y avoir un moyen de l'automatiser. = D
ADTC

8
#region

// code

#endregion

Vous n'obtenez vraiment aucun avantage dans l'IDE. Avec Java, il n'y a pas de norme définie dans l'IDE, donc il n'y a vraiment pas de norme parallèle à #region.


3
Eh bien, s'il existe une norme region, alors nous pouvons être sûrs que les IDE java prendront en charge, n'est-ce pas?
Pacerier

@Pacerier s'ils soutiennent cette norme, oui. Je pense que #region est plus une fonctionnalité IDE qu'une norme. En théorie, les IDE java pourraient implémenter ce comportement et en faire une norme de facto
El Mac

4

Voici un exemple:

//region regionName
//code
//endregion

100% fonctionne dans le studio Android


Je ne sais pas pourquoi vous avez été rétrogradé, cela fonctionne réellement dans Android Studio sans aucune configuration nécessaire!
maxdelia

2

J'ai généralement besoin de cela pour le code commenté, j'utilise donc des accolades au début et à la fin de cela.

{
// Code
// Code
// Code
// Code
}

Il peut être utilisé pour les extraits de code mais peut créer des problèmes dans du code car il modifie la portée de la variable.


1

En fait, johann, le #indique qu'il s'agit d'une directive de préprocesseur, ce qui signifie essentiellement qu'il indique à l'EDI quoi faire.

Dans le cas de l'utilisation #regionet #endregionde votre code, cela ne fait AUCUNE différence dans le code final, qu'il soit là ou non. Pouvez-vous vraiment l'appeler un élément de langage si son utilisation ne change rien?

En dehors de cela, java n'a pas de directives de préprocesseur, ce qui signifie que l'option de pliage de code est définie sur une base par idée, dans les netbeans par exemple avec une instruction // <code-fold>


1
pouvez-vous vraiment l'appeler un élément de langage si son utilisation ne change rien? - que diriez-vous des commentaires?!
epeleg

2
J'ai entendu l'argument avant que ce n'est pas une fonction de la langue. Et cette question "Pouvez-vous vraiment l'appeler un élément de langage si son utilisation ne change rien?" est ridicule. La refactorisation de beaucoup de temps rend le code plus facile à lire pour les humains et ne fait rien (espérons-le) pour avoir un impact sur la fonction du code.
Menefee

1

Sur Mac et Android Studio, suivez cette séquence:

  1. Mettez en surbrillance le code source à plier
  2. Appuyez sur Alt+ Command+t
  3. Sélectionner <editor-fold>

Vous pouvez également sélectionner d'autres options:

entrez la description de l'image ici


-1

Dans Eclipse, vous pouvez réduire le bloc de région variable enveloppant les crochets. Le plus proche est de faire quelque chose comme ça:

public class counter_class 
{ 

    { // Region

        int variable = 0;

    }
}

8
C'est inutile. Cela ne fonctionne pas à l'intérieur d'une méthode, en plus il CASSE LE CODE! (Les variables privées se plaindront qu'elles veulent être définitives. La variable sans définition de portée ne sera pas accessible en dehors des crochets intérieurs!)
ADTC

1
Je n'aime pas cette méthode, ajoute trop d'accolades. Cela peut conduire à une confusion du code :(
Broken_Window


-12

Il existe une option pour obtenir le même résultat, suivez les points ci-dessous.

1) Ouvrez l'explorateur de macros:

2) Créez une nouvelle macro:

3) Nommez-le "OutlineRegions" (ou tout ce que vous voulez)

4) Faites un clic droit sur les "OutlineRegions" (affichage sur Macro Explorer) sélectionnez l'option "Modifier" et collez-y le code VB suivant:

    Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics
Imports System.Collections

Public Module OutlineRegions

    Sub OutlineRegions()
        Dim selection As EnvDTE.TextSelection = DTE.ActiveDocument.Selection

        Const REGION_START As String = "//#region"
        Const REGION_END As String = "//#endregion"

        selection.SelectAll()
        Dim text As String = selection.Text
        selection.StartOfDocument(True)

        Dim startIndex As Integer
        Dim endIndex As Integer
        Dim lastIndex As Integer = 0
        Dim startRegions As Stack = New Stack()

        Do
            startIndex = text.IndexOf(REGION_START, lastIndex)
            endIndex = text.IndexOf(REGION_END, lastIndex)

            If startIndex = -1 AndAlso endIndex = -1 Then
                Exit Do
            End If

            If startIndex <> -1 AndAlso startIndex < endIndex Then
                startRegions.Push(startIndex)
                lastIndex = startIndex + 1
            Else
                ' Outline region ...
                selection.MoveToLineAndOffset(CalcLineNumber(text, CInt(startRegions.Pop())), 1)
                selection.MoveToLineAndOffset(CalcLineNumber(text, endIndex) + 1, 1, True)
                selection.OutlineSection()

                lastIndex = endIndex + 1
            End If
        Loop

        selection.StartOfDocument()
    End Sub

    Private Function CalcLineNumber(ByVal text As String, ByVal index As Integer)
        Dim lineNumber As Integer = 1
        Dim i As Integer = 0

        While i < index
            If text.Chars(i) = vbCr Then
                lineNumber += 1
                i += 1
            End If

            i += 1
        End While

        Return lineNumber
    End Function
End Module

5) Enregistrez la macro et fermez l'éditeur.

6) Attribuons maintenant un raccourci à la macro. Allez dans Outils-> Options-> Environnement-> Clavier et recherchez votre macro dans la zone de texte "afficher les commandes contenant" (Type: Macro dans la zone de texte, il suggérera le nom des macros, choisissez le vôtre.)

7) maintenant dans la zone de texte sous "Appuyez sur les touches de raccourci", vous pouvez entrer le raccourci souhaité. J'utilise Ctrl + M + N.

Utilisation:

return
{
//Properties
//#region
Name:null,
Address:null
//#endregion
}

8) Appuyez sur la touche de raccourci enregistrée

Voir résultat ci-dessous:

entrez la description de l'image ici


Où est l'explorateur de macros? J'utilise Eclipse 4.3.1 et je ne le trouve pas.
Mohamed El-Nakib

1
Ce n'est même pas Java?
Burak Karakuş

@CJBS - re: This code seems to be for Visual Basic.NETce qui suggère que l'EDI l'est Visual Studio.
Jesse Chisholm

@JesseChisholm - c'était mon point. L'OP veut Java, pas VB, et cible l'IDE Eclipse, pas VS.
CJBS

1
Réponse RIP. S'il utilisait Visual Studio, il aurait pu juste utiliser #regionet#endregion
PNDA
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.