Java equivalente a #region in C #


489

Voglio usare le regioni per ripiegare il codice in Eclipse ; come può essere fatto in Java?

Un esempio di utilizzo in C # :

#region name
//code
#endregion

@MichaelLaVoie: la risposta è stata cancellata. Qualche possibilità che sia stato spostato in un altro sito SE?
Adam Parkin,


Mi sono unito alla festa tardi. Sono d'accordo con IKashef che ci sono altre opzioni che l'attuale risposta selezionata. La risposta di Yaqub Ahmad mi ha salvato la vita. Non ho avuto bisogno di scaricare Intellig IDE. Ho scaricato il citato plug-in CoffeeBytes dal commento di cking24343, ho applicato la configurazione di 'null n void' e ho funzionato bene in Luna. È necessario riavviare dopo aver applicato la configurazione
Maximus Decimus,

3
inizia con //region [Description] e termina con//endregion
Amir Ziarati

Risposte:


216

Non esiste un simile equivalente standard . Alcuni IDE - Intellij, ad esempio, o Eclipse - possono piegarsi a seconda dei tipi di codice coinvolti (costruttori, importazioni, ecc.), Ma non c'è niente di simile #region.


30
In realtà questo può essere raggiunto. Se scorri verso il basso su questo post "Yaqub Ahmad" spiega come ottenere questa funzionalità. Anche qui c'è un link ( kosiara87.blogspot.com/2011/12/… ) che ti mostra come aggiungerlo al tuo ambiente eclissi esistente ... estremamente utile!
cking24343,

14
Sicuro. Ma non c'è nulla di standard . Viene eseguito in IDE anziché avere un costrutto in linguaggio (o testo)
Brian Agnew,

2
@lKashef - allora qual è l' equivalente standard allora? Tutto quanto indicato di seguito si riferisce a un particolare IDE, non è vero?
Brian Agnew,

4
@BrianAgnew, L'OP non ha menzionato nulla sugli standard, ma vuole solo poter avere blocchi simili a regioni nel suo codice. Ad esempio hai detto "ma non c'è niente come #region". in IDEA per esempio // region .. // endregion funziona esattamente come #region. Non esiste alcun modo standard per farlo in primo luogo poiché dipende dall'IDE stesso o da un plug-in. Gli sviluppatori con sfondi Microsoft vedranno sempre MS Visual Studio come "L'IDE", ma in realtà è solo una delle opzioni e un altro IDE potrebbe o meno implementare tale funzionalità.
Mazen Elkashef,

4
@BrianAgnew, ho quasi rinunciato fino a quando non ho visto le risposte degli altri che mi hanno aiutato più delle tue. Seriamente nessuna sensazione difficile qui, siamo tutti qui per imparare e condividere le nostre conoscenze e sto affermando il fatto che sono stato fuorviato dalla tua risposta, forse era una buona idea nel 2010 ma non oggi. Spero che tu capisca il mio punto di vista.
Mazen Elkashef,

476

Jet Brains IDEA ha questa funzione. È possibile utilizzare il tasto di scelta rapida surround con per quello (ctrl + alt + T). È solo la funzione IDEA.

Le regioni sembrano così:

//region Description

Some code

//endregion

3
Grazie per quello! Funziona perfettamente su Android Studio.
rogcg,

2
La domanda richiede chiaramente una soluzione per Eclipse.
Duncan Jones,

5
@Duncan 1. Niente di male per mostrare alla gente che ci sono alternative. 2. Ho cercato su Google regioni sotto Intellij e l'ho trovato.
BHuelse,

2
Su Linux, quel tasto di scelta rapida esegue il terminale
user1209216

1
L'ho appena provato e sembra che IntelliJ supporti anche le regioni nidificate! Peccato che questo non sia standard.
Gruber,

209

Con Android Studio, prova questo:

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

Attento: nessuna riga vuota dopo // regione ...

E otterrai:


stava esaminando tutte le risposte e ho capito che Android Studio si basa su IntelliJ, quindi questo deve essere supportato. buona cosa sottolineare però!
serina,

5
bummi, l'ho provato in 0.4.2 con una riga vuota e funziona ancora
serina

2
Solo un commento / consiglio (e non una risposta alla tua domanda). È opinione diffusa che le regioni debbano essere evitate, poiché ti permettono di nascondere la complessità della classe invece di lavorare sul tuo stile di codifica. Invece di enormi classi, in cui ogni classe è responsabile di molte funzionalità, lavora invece sulla suddivisione del codice in classi più piccole. Faciliterà la gestione del codice nel tempo. Per saperne di più qui: blog.codinghorror.com/the-problem-with-code-folding
Daniel Saidi,

5
@DanielSaidi oh, l'orrore! :) il ragazzo nell'articolo " Non riesco a vedere nulla! Devo espandere manualmente quelle sezioni per sfogliare qualsiasi codice in questa classe. " ... quindi perché è troppo pigro per premere un tasto (che dovrebbe espandere tutto sezioni nel file), la funzione non deve essere utilizzata: è una funzione super meravigliosa. In questo momento lo sto usando uno per uno per nascondere i metodi che ho verificato sono thread-safe nella classe in cui sto lavorando uno, aiuta davvero a organizzarmi. Di tanto in tanto mi chiedevo dove fosse qualcosa Pensavo fosse lì, ma questo è un piccolo prezzo da pagare ...
ycomp

4
@DanielSaidi Non si tratta di nascondere la complessità ma nascondere codice banale come dichiarazioni di variabili, getter, codice di inizializzazione e così via. Si noti inoltre che NON è necessario #regioni per comprimere il "codice complesso" presente nelle funzioni e nelle classi. Il manzo con i programmatori che utilizza uno strumento in modo errato non equivale a "lo strumento è cattivo".
user1567453

96

Nessun equivalente nella lingua ... Basato su IDE ...

Ad esempio nei netbeans:

NetBeans / Creator supporta questa sintassi:

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

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


1
Anche se non è una piegatura specifica della lingua ma mi ha ancora aiutato in NetBeans. Esattamente quello che volevo ottenere. Voglio solo che il mio codice sia più utile e organizzato per me.
Indaco,

Esiste un collegamento che può riempire automaticamente questa riga?
Pini Cheyni

1
@ pini-cheyni - ui.netbeans.org/docs/ui/code_folding/cf_uispec.html ha scorciatoie disponibili per la piegatura ....
Kevin LaBranche

@JadChahine: l'OP ha chiesto di Eclipse, ma è d'accordo che questo funziona bene per NetBeans. La sintassi è un po 'goffa ma il copia-incolla lo rende abbastanza semplice.
AlainD,


49

La funzione di piegatura del codice personalizzata può essere aggiunta a Eclipse usando il plugin di piegatura del codice CoffeeScript.

Questo è testato per funzionare con eclipse Luna e Juno. Ecco i passaggi

  1. Scarica il plugin da qui

  2. Estrarre il contenuto dell'archivio

  3. Copia incolla il contenuto del plug-in e la cartella delle funzionalità nella stessa cartella con nome all'interno della directory di installazione di eclipse
  4. Riavvia l'eclissi
  5. Navigare Window >Preferences >Java >Editor >Folding >Select folding to use: Coffee Bytes Java >General tab >Tick checkboxes in front of User Defined Fold

    inserisci qui la descrizione dell'immagine

  6. Crea una nuova regione come mostrato:

    inserisci qui la descrizione dell'immagine

  7. Riavvia Eclipse.

  8. Prova se la piegatura funziona con i commenti preceduti da identificatori di inizio e fine specificati

    inserisci qui la descrizione dell'immagine

    inserisci qui la descrizione dell'immagine

Puoi scaricare l'archivio e trovare passaggi anche in questo Blog .


2
non funziona per me su eclipse neon: copia e incolla non ha fatto nulla: l'unica cosa che è cambiata è stata nel marketplace >> plugin installati >> aggiornamento. Ho aggiornato il plugin coffeeScript, ma non ho ricevuto l'opzione "Seleziona pieghevole da usare" in java >> editor >> pieghevole
Angelo Oparah

Ha funzionato con Eclipse Oxygen, tuttavia è necessario riavviare nuovamente Eclipse. L'icona visualizzata per me era un'icona rossa, quindi ho cambiato la configurazione, Finestra → Preferenze → Java → Editor → Pieghevole fare clic sulla scheda Avanzate e cambiare il tema dell'icona impostato su Moderno
Michieru

38

Questa è più una funzione IDE che una funzione lingua. Netbeans ti consente di definire le tue definizioni di piegatura usando la seguente definizione:

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

Come notato nell'articolo, questo può essere supportato anche da altri editor, ma non ci sono garanzie.


In Android Studio, almeno, non è possibile piegare parte di un blocco. Se la specifica di piega inizia fuori da un blocco e termina all'interno di un blocco, non si attiverà.
Prof. Von Lemongargle,

30

il modo più veloce in Android Studio(o IntelliJ IDEA)

  1. highlight the code vuoi circondarlo
  2. premi ctrl+ alt+t
  3. premi c==> quindi inserisci la descrizione
  4. godere

// region <name> Il tuo codice ... // endregion È più efficiente e semplice! hehe; P
diegodsp

30

AndroidStudioregione
Crea regione

Innanzitutto , trova (e definisci scorciatoia se necessario) per il Surround Withmenu inserisci qui la descrizione dell'immagine

Quindi , seleziona il codice, premi Ctrl+Alt+Semicolon-> scegliregion..endregion...
inserisci qui la descrizione dell'immagine

Vai alla regione

Innanzitutto, trova la Custom Foldingscorciatoia In
inserisci qui la descrizione dell'immagine secondo luogo, da qualsiasi parte del codice, premiCtrl+Alt+Period('>' on keyboard) inserisci qui la descrizione dell'immagine


20

Contrariamente a quanto la maggior parte pubblica, questa NON è una cosa IDE. È una cosa linguistica. #Region è un'istruzione C #.


55
Ciò che molti postano è che IN JAVA questa è una funzione IDE.
WhyNotHugo,

1
Vedo le 2 risposte più popolari dicendo che non esiste una tale funzione linguistica. -1.
Mohayemin,

23
In C # è in parte IDE, in parte linguaggio. Il linguaggio supporta le direttive del preprocessore, ma il preprocessore le ignora semplicemente (allo stesso modo in cui il processore ignora i commenti). L'IDE (Visual Studio) li utilizza per eseguire la piegatura del codice.
ADTC

Java non ha specificato il codice pieghevole solo nell'IDE (Netbeans), Netbeans ha commenti più speciali come "TODO" e altro ancora. Sono molto utili per tracciare i tuoi progressi attraverso il processo di sviluppo del progetto SW
Pini Cheyni

17

Vengo da C # a Java e ho avuto lo stesso problema e l'alternativa migliore ed esatta per regione è qualcosa di simile al seguente (lavorando in Android Studio, non so di intelliJ):

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

il collegamento è come di seguito:

1- selezionare il codice

2- premere ctrl+alt +t

3- premere ce scrivere la descrizione


In AndroidStudio versione 2.3.1 si piega. Non so quando ha iniziato a piegare.
MiguelSlv,

Grazie. Funziona perfettamente in Android Studio 3.0 beta 2. Per curiosità ho provato in Eclipse Oxygen, non funziona di default ma non ho cercato ulteriormente.
Laurent,

15

Il modo migliore

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

Suggerimento: inserisci ";" alla fine dell '"endregion"


1
eclipse non piega il codice, quale IDE stai usando?
Ohad Cohen,

Funziona con Android Studio e IntelliJ IDEA (entrambi sono realizzati dalla stessa base di codice da JetBrains)
prashu132,

IDE sta per "ambiente di sviluppo integrato"
Pini Cheyni

12

Se qualcuno è interessato, in Eclipse puoi comprimere tutti i tuoi metodi ecc. In una sola volta, fai clic con il pulsante destro del mouse quando normalmente inseriresti un punto di interruzione, fai clic su "Pieghevole"> "Comprimi tutto". Sa che non è una risposta alla domanda, ma fornisce semplicemente un'alternativa alla rapida piegatura del codice.


1
Puoi anche fare in modo che Eclipse comprima automaticamente tutto quando apri un file di codice sorgente. Preferenze> Java> Editor> Piegatura> "Inizialmente piega questi elementi" (seleziona tutto nell'elenco). Trovo conveniente concentrarmi solo su ciò di cui ho bisogno, specialmente nei file di codice sorgente lunghi.
ADTC

@ADTC - Grazie - tante centinaia di volte l'ho fatto manualmente ogni volta che apro un file - mai più !!
ToolmakerSteve

@ToolmakerSteve Se riesci a fare qualcosa di ripetitivo manualmente su un computer, ci deve essere solo un modo per automatizzarlo. = D
ADTC,

8
#region

// code

#endregion

Ti dà davvero solo qualche vantaggio nell'IDE. Con Java, non esiste uno standard definito in IDE, quindi non esiste uno standard parallelo #region.


3
Bene, se esiste uno standard region, allora possiamo essere sicuri che gli IDE di Java lo supporteranno, no?
Pacerier,

@Pacerier se supportano quello standard, sì. Penso che #region sia più una funzione IDE che uno standard. In teoria, gli IDE di Java potrebbero implementare questo comportamento e renderlo uno standard di fatto
El Mac

4

ecco un esempio:

//region regionName
//code
//endregion

100% funziona in Android Studio


Non so perché sei stato sottoposto a downgrade, in realtà funziona in Android Studio senza alcuna configurazione necessaria!
maxdelia,

2

Di solito ho bisogno di questo per il codice commentato, quindi uso parentesi graffe all'inizio e alla fine di quello.

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

Potrebbe essere utilizzato per frammenti di codice ma può creare problemi in alcuni codici perché modifica l'ambito della variabile.


1

In realtà johann, #indica che si tratta di una direttiva preprocessore, il che significa sostanzialmente che dice all'IDE cosa fare.

Nel caso di utilizzo di #regione#endregion nel tuo codice, NON fa alcuna differenza nel codice finale che sia presente o meno. Puoi davvero chiamarlo elemento di linguaggio se usarlo non cambia nulla?

A parte questo, java non ha direttive per il preprocessore, il che significa che l'opzione di piegatura del codice è definita su una base per-ide, ad esempio in netbeans con un'istruzione // <code-fold>


1
puoi davvero chiamarlo elemento di linguaggio se usarlo non cambia nulla? - che ne dici di commenti ?!
Epeleg,

2
Ho già sentito l'argomento che non è una funzione della lingua. E questa domanda "Riesci davvero a chiamarlo elemento di linguaggio se usarlo non cambia nulla?" è ridicolo. Un sacco di tempo di refactoring sta rendendo il codice più facile da leggere per gli umani e non fa nulla (si spera) per influire sulla funzione del codice.
Menefee,

1

Su Mac e Android Studio segui questa sequenza:

  1. Evidenzia il codice sorgente da piegare
  2. Premi Alt+ Command+t
  3. Selezionare <editor-fold>

Inoltre puoi selezionare altre opzioni:

inserisci qui la descrizione dell'immagine


-1

In Eclipse è possibile comprimere le parentesi che avvolgono il blocco regione variabile. Il più vicino è fare qualcosa del genere:

public class counter_class 
{ 

    { // Region

        int variable = 0;

    }
}

8
Questo è inutile. Non funziona all'interno di un metodo, oltre a BREAKS CODICE! (Le variabili private si lamenteranno del fatto che vogliono essere definitive. Le variabili senza definizione dell'ambito non saranno accessibili al di fuori delle parentesi interne!)
ADTC

1
Non mi piace questo metodo, aggiunge troppe parentesi graffe. Questo può portare a codice confuso :(
Broken_Window il


-12

C'è qualche opzione per ottenere lo stesso, seguire i punti seguenti.

1) Apri Esplora macro:

2) Crea nuova macro:

3) Denominalo "OutlineRegions" (o come vuoi)

4) Fare clic con il tasto destro del mouse su "OutlineRegions" (mostrando su Macro Explorer) selezionare l'opzione "Modifica" e incollare il seguente codice VB:

    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) Salvare la macro e chiudere l'editor.

6) Ora assegniamo il collegamento alla macro. Vai su Strumenti-> Opzioni-> Ambiente-> Tastiera e cerca la tua macro nella casella di testo "mostra comandi contenenti" (Digita: Macro nella casella di testo, suggerirà il nome della macro, scegli il tuo.)

7) ora nella casella di testo sotto "Premere i tasti di scelta rapida" è possibile inserire il collegamento desiderato. Uso Ctrl + M + N.

Uso:

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

8) Premere il tasto di scelta rapida salvato

Vedi sotto il risultato:

inserisci qui la descrizione dell'immagine


Dov'è il Macro Explorer? Sto usando Eclipse 4.3.1 e non riesco a trovarlo.
Mohamed El-Nakib,

1
Questo non è nemmeno Java?
Burak Karakuş,

@CJBS - re: This code seems to be for Visual Basic.NETche suggerirebbe che l'IDE sia Visual Studio.
Jesse Chisholm,

@JesseChisholm - quello era il mio punto. L'OP vuole Java, non VB, e ha come target l'IDE Eclipse, non VS.
CJBS,

1
Risposta RIP. Se stesse usando Visual Studio, avrebbe potuto usare #regione#endregion
PNDA
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.