Java equivalente a #region en C #

489

Quiero usar regiones para el plegado de código en Eclipse ; ¿Cómo se puede hacer eso en Java?

Un ejemplo de uso en C # :

#region name
//code
#endregion
Pentium10
fuente
@MichaelLaVoie: la respuesta ha sido eliminada. ¿Alguna posibilidad de que se haya movido a un sitio de SE diferente?
Adam Parkin
1
programmers.stackexchange.com/questions/53086/… parece similar en espíritu.
Adam Parkin
Me uní a la fiesta tarde. Estoy de acuerdo con IKashef en que hay otras opciones que la respuesta seleccionada actual. La respuesta de Yaqub Ahmad me salvó la vida. No necesitaba descargar el IDE de Intellig. Descargué el complemento CoffeeBytes mencionado del comentario de cking24343, apliqué la configuración de 'null n void' y funcioné bien en Luna. Debe reiniciar después de aplicar la configuración
Maximus Decimus
3
comenzar con //region [Description] y al final con//endregion
Amir Ziarati

Respuestas:

216

No existe tal equivalente estándar . Algunos IDEs (Intellij, por ejemplo, o Eclipse) pueden plegarse dependiendo de los tipos de código involucrados (constructores, importaciones, etc.), pero no hay nada parecido #region.

Brian Agnew
fuente
30
En realidad esto se puede lograr. Si se desplaza hacia abajo en esta publicación, "Yaqub Ahmad" explica cómo obtener esta funcionalidad. También aquí hay un enlace ( kosiara87.blogspot.com/2011/12/… ) que le muestra cómo agregarlo a su entorno de eclipse existente ... ¡extremadamente útil!
cking24343
14
Por supuesto. Pero no hay nada estándar . Se realiza en IDEs en lugar de tener una construcción de lenguaje (o texto)
Brian Agnew
2
@lKashef: entonces, ¿cuál es el equivalente estándar ? Todo lo que se menciona a continuación se relaciona con un IDE en particular, ¿no es así?
Brian Agnew
44
@BrianAgnew, El OP no mencionó nada acerca de los estándares, sino que solo desea poder tener bloques similares a regiones en su código. Por ejemplo, dijiste "pero no hay nada como #region". en IDEA por ejemplo // region .. // endregion funciona exactamente como #region. No hay una forma estándar de hacer esto en primer lugar, ya que depende del IDE en sí o de un complemento. Los desarrolladores con fondos de Microsoft siempre verán a MS Visual Studio como "El" IDE, pero de hecho es solo una de las opciones y otro IDE podría o no implementar tal funcionalidad.
Mazen Elkashef
44
@BrianAgnew, casi me di por vencido hasta que vi las respuestas de otras personas que ayudaron más que la tuya. En serio, no hay resentimiento aquí, estamos todos aquí para aprender y compartir nuestro conocimiento y estoy afirmando el hecho de que me confundí con su respuesta, tal vez fue buena en 2010, pero no hoy. Espero que entiendas mi punto.
Mazen Elkashef
476

Jet Brains IDEA tiene esta característica. Puede usar la tecla de acceso rápido surround para eso (ctrl + alt + T). Es solo la función IDEA.

Las regiones allí se ven así:

//region Description

Some code

//endregion
Alexander Bezrodniy
fuente
3
¡Gracias por eso! Funciona perfectamente en Android Studio.
rogcg
2
La pregunta claramente solicita una solución para Eclipse.
Duncan Jones
55
@Duncan 1. No hay nada malo en mostrarle a la gente que hay alternativas. 2. Busqué en Google las regiones bajo Intellij y lo encontré.
BHuelse
2
En Linux, esa tecla de
acceso
1
¡Solo lo probé y parece que IntelliJ también admite regiones anidadas! Lástima que esto no sea estándar.
Gruber
209

Con Android Studio, intente esto:

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

Cuidado: sin línea en blanco después de // región ...

Y obtendrás:

Cyril Jacquart
fuente
estaba revisando todas las respuestas y pensé que ya que Android Studio se basa en IntelliJ, entonces esto debe ser compatible. ¡Qué bueno señalarlo!
Serine
55
bummi, lo probé en 0.4.2 con una línea en blanco y aún funciona
Serine
2
Solo un comentario / consejo (y de ninguna manera una respuesta a su pregunta). Es una opinión generalizada que las regiones deben evitarse, ya que le permiten ocultar la complejidad de la clase en lugar de trabajar en su estilo de codificación. En lugar de grandes clases, donde cada clase es responsable de una gran cantidad de funcionalidades, trabaje para dividir su código en clases más pequeñas. Hará que su código sea más fácil de administrar con el tiempo. Lea más aquí: blog.codinghorror.com/the-problem-with-code-folding
Daniel Saidi
55
@DanielSaidi ¡Oh, qué horror! :) el chico en el artículo "¡ No puedo ver nada! Tengo que expandir manualmente esas secciones para examinar cualquiera de los códigos de esta clase " ... así que porque es demasiado vago para presionar una tecla (eso expandiría todo secciones en el archivo), la característica no se debe utilizar, es una característica súper maravillosa. En este momento lo estoy usando para ocultar uno por uno, los métodos que he verificado son seguros para subprocesos en la clase en la que estoy trabajando, realmente ayuda a mantenerme organizado. De vez en cuando me pregunto dónde está algo Pensé que estaba allí, pero ese es un pequeño precio a pagar ...
ycomp
44
@DanielSaidi No se trata de ocultar la complejidad sino de ocultar el código mundano, como declaraciones de variables, captadores, código de inicialización, etc. También tenga en cuenta que NO requiere #regiones para colapsar el "código complejo" que se encuentra en las funciones y clases. El problema con los programadores que usan una herramienta incorrectamente no equivale a "la herramienta es mala".
user1567453
96

No hay equivalente en el idioma ... Basado en IDEs ...

Por ejemplo en netbeans:

NetBeans / Creator admite esta sintaxis:

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

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

Kevin LaBranche
fuente
1
Aunque no es un plegado específico del idioma, me ayudó en NetBeans. Exactamente lo que quería lograr. Solo quiero que mi código sea más útil y organizado para mí.
Indigo
¿Hay algún atajo que pueda llenar automáticamente esta línea?
Pini Cheyni
1
@ pini-cheyni - ui.netbeans.org/docs/ui/code_folding/cf_uispec.html tiene accesos directos disponibles para doblar ...
Kevin LaBranche
@JadChahine: El OP preguntó sobre Eclipse, pero está de acuerdo en que esto funciona bien para NetBeans. La sintaxis es un poco torpe, pero copiar y pegar hace que sea bastante fácil.
AlainD
49

La función de plegado de código personalizado se puede agregar a eclipse utilizando el complemento de plegado de código de CoffeeScript.

Esto está probado para funcionar con eclipse Luna y Juno. Aquí están los pasos.

  1. Descargue el complemento desde aquí

  2. Extraer el contenido del archivo

  3. Copie y pegue el contenido del plugin y la carpeta de características en la misma carpeta con nombre dentro del directorio de instalación de eclipse
  4. Reinicia el eclipse
  5. Navegar Window >Preferences >Java >Editor >Folding >Select folding to use: Coffee Bytes Java >General tab >Tick checkboxes in front of User Defined Fold

    ingrese la descripción de la imagen aquí

  6. Cree una nueva región como se muestra:

    ingrese la descripción de la imagen aquí

  7. Reinicia el Eclipse.

  8. Pruebe si el plegado funciona con comentarios prefijados con identificadores iniciales y finales especificados

    ingrese la descripción de la imagen aquí

    ingrese la descripción de la imagen aquí

Puede descargar el archivo y encontrar pasos en este Blog también.

DeltaCap019
fuente
2
no funciona para mí en eclipse neon: copiar y pegar no hizo nada: lo único que cambió fue en el mercado >> complementos instalados >> actualizar. Actualicé el plugin coffeeScript, pero no obtuve la opción "Seleccionar plegado para usar" en java >> editor >> plegado
Angelo Oparah
Funcionó en el Eclipse Oxygen, sin embargo, debe reiniciar el eclipse nuevamente. El ícono que se me mostró era un ícono rojo, así que cambié la configuración, Ventana → Preferencia → Java → Editor → Plegable, haga clic en la pestaña Avanzado y cambie el tema del ícono a Moderno
Michieru
38

Esta es más una función IDE que una función de idioma. Netbeans le permite definir sus propias definiciones plegables utilizando la siguiente definición:

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

Como se señaló en el artículo, esto también puede ser respaldado por otros editores, pero no hay garantías.

pesado
fuente
En Android Studio, al menos, no puedes doblar parte de un bloque. Si la especificación de pliegue comienza fuera de un bloque y termina dentro de un bloque, no se activará.
Prof. Von Lemongargle
30

la forma más rápida en Android Studio(o IntelliJ IDEA)

  1. highlight the code quieres rodearlo
  2. presione ctrl+alt +t
  3. prensa c ==> luego ingrese la descripción
  4. disfrutar
Basheer AL-MOMANI
fuente
// region <nombre> Tu código ... // endregion ¡Es más eficiente y simple! jeje; P
diegodsp
30

AndroidStudioregión
Crear región

Primero , busque (y defina un atajo si es necesario) para el Surround Withmenú ingrese la descripción de la imagen aquí

Luego , seleccione el código, presione Ctrl+Alt+Semicolon-> elijaregion..endregion...
ingrese la descripción de la imagen aquí

Ir a la región

Primero, encuentre el Custom Foldingatajo.
ingrese la descripción de la imagen aquí Segundo, desde cualquier parte de su código, presioneCtrl+Alt+Period('>' on keyboard) ingrese la descripción de la imagen aquí

Phan Van Linh
fuente
20

Al contrario de lo que la mayoría está publicando, esto NO es algo IDE. Es una cosa del lenguaje. La # región es una declaración de C #.

Johann
fuente
55
Lo que más publican es que EN JAVA esta es una característica IDE.
WhyNotHugo
1
Veo las 2 respuestas más populares que dicen que no existe tal función de idioma. -1.
Mohayemin
23
En C # es en parte IDE, en parte lenguaje. El lenguaje admite las directivas del preprocesador, pero el preprocesador simplemente las ignora (del mismo modo que el procesador ignora los comentarios). El IDE (Visual Studio) los usa para plegar el código.
ADTC
Java no tiene un código específico que solo dobla el IDE (Netbeans), Netbeans tiene comentarios más especiales como "TODO" y más. Son muy útiles para seguir su progreso a través del proceso de desarrollo de proyectos de SW
Pini Cheyni
17

Venía de C # a Java y tenía el mismo problema y la mejor y exacta alternativa para la región es algo como a continuación (trabajando en Android Studio, no sé sobre intelliJ):

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

el atajo es como a continuación:

1- selecciona el código

2- presiona ctrl+alt +t

3- presiona cy escribe tu descripción

Amir Ziarati
fuente
En AndroidStudio versión 2.3.1 se pliega. No sé cuándo comenzó a doblarse.
MiguelSlv
Gracias. Funciona perfectamente en Android Studio 3.0 beta 2. Por curiosidad que probé en Eclipse Oxygen, no funciona de manera predeterminada pero no buscó más.
Laurent
15

La mejor manera

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

Consejo: Pon ";" al final de la "región final"

Taddeo
fuente
1
eclipse no dobla el código, ¿qué IDE estás usando?
Ohad Cohen
Funciona con Android Studio e IntelliJ IDEA (ambos están hechos de la misma base de código por JetBrains)
prashu132
IDE significa "entorno de desarrollo integrado"
Pini Cheyni
12

Si alguien está interesado, en Eclipse puede contraer todos sus métodos, etc. de una sola vez, simplemente haga clic derecho cuando normalmente inserte un punto de ruptura, haga clic en 'Plegar'> 'Contraer todo'. Sabe que no es una respuesta a la pregunta, sino que simplemente proporciona una alternativa al plegado rápido de código.

Ricky
fuente
1
También puede hacer que Eclipse contraiga automáticamente todo al abrir un archivo de código fuente. Preferencias> Java> Editor> Plegado> "Inicialmente plegar estos elementos" (marque todo en la lista). Me parece conveniente centrarme solo en lo que necesito, especialmente en archivos de código fuente largos.
ADTC
@ADTC - Gracias, tantas cientos de veces lo he hecho manualmente cada vez que abro un archivo, ¡nunca más!
ToolmakerSteve
@ToolmakerSteve Si puede hacer algo repetitivo manualmente en una computadora, solo tiene que haber una manera de automatizarlo. = D
ADTC
8
#region

// code

#endregion

Realmente solo obtienes algún beneficio en el IDE. Con Java, no hay un estándar establecido en IDE, por lo que realmente no hay un estándar paralelo a #region.

Justin Niessner
fuente
3
Bueno, si hay un estándar para region, entonces podemos estar seguros de que los IDE de Java lo admitirán, ¿no?
Pacerier
@Pacerier si admiten ese estándar, sí. Creo que #region es más una función IDE que un estándar. En teoría, los IDE de Java podrían implementar este comportamiento y convertirlo en un estándar de facto
El Mac
4

Aquí hay un ejemplo:

//region regionName
//code
//endregion

100% funciona en Android studio

Codificador123
fuente
No sé por qué te han votado negativamente, ¡esto realmente funciona en Android Studio sin necesidad de configuración!
maxdelia
2

Por lo general, necesito esto para el código comentado, así que utilizo llaves al principio y al final.

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

Podría usarse para fragmentos de código, pero puede crear problemas en algunos códigos porque cambia el alcance de la variable.

Yawar
fuente
1

En realidad, johann, #indica que es una directiva de preprocesador, lo que básicamente significa que le dice al IDE qué hacer.

En el caso de usar #regiony#endregion en su código, NO hace ninguna diferencia en el código final si está allí o no. ¿Realmente puedes llamarlo un elemento del lenguaje si usarlo no cambia nada?

Aparte de eso, java no tiene directivas de preprocesador, lo que significa que la opción de plegado de código se define per-ide, en netbeans, por ejemplo, con una declaración // <code-fold>

Sirius Negro
fuente
1
¿realmente puedes llamarlo un elemento del lenguaje si usarlo no cambia nada? - ¿Qué tal comentarios?
Epeleg
2
He escuchado el argumento anterior de que no es una función del lenguaje. Y esta pregunta "¿Realmente puedes llamarlo un elemento del lenguaje si usarlo no cambia nada?" es ridículo. La refactorización de mucho tiempo está haciendo que el código sea más fácil de leer para los humanos y no hace nada (con suerte) para afectar la función del código.
Menefee
1

En Mac y Android Studio, siga esta secuencia:

  1. Resalta el código fuente para doblar
  2. Presione Alt+ Command+t
  3. Seleccione <editor-fold>

También puede seleccionar otras opciones:

ingrese la descripción de la imagen aquí

Victor Ruiz.
fuente
-1

En Eclipse puede contraer los corchetes que envuelven el bloque de región variable. Lo más cercano es hacer algo como esto:

public class counter_class 
{ 

    { // Region

        int variable = 0;

    }
}
Dennis
fuente
8
Esto es inútil No funciona dentro de un método, ¡además rompe el CÓDIGO! (Las variables privadas se quejarán de que quieren ser definitivas. ¡Las variables sin definición de alcance no serán accesibles fuera de los corchetes internos!)
ADTC
1
No me gusta este método, agrega demasiadas llaves. Esto puede conducir a un código confuso :(
Broken_Window
-3

Simplemente instale y active el complemento Coffee-Bytes (Eclipse)

acmoune
fuente
Esto no solo se menciona en una respuesta anterior , sino que ni siquiera proporcionó información útil al respecto.
Xynariz
-12

Hay alguna opción para lograr lo mismo, siga los puntos a continuación.

1) Explorador de macros abierto:

2) Crear nueva macro:

3) Nómbralo "OutlineRegions" (o lo que quieras)

4) Haga clic derecho en "OutlineRegions" (que se muestra en el Explorador de macros), seleccione la opción "Editar" y pegue el siguiente código 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) Guarde la macro y cierre el editor.

6) Ahora asignemos acceso directo a la macro. Vaya a Herramientas-> Opciones-> Entorno-> Teclado y busque su macro en el cuadro de texto "mostrar comandos que contienen" (Escriba: Macro en el cuadro de texto, le sugerirá el nombre de la macro, elija el suyo).

7) ahora en el cuadro de texto debajo de "Presionar teclas de acceso directo" puede ingresar el acceso directo deseado. Yo uso Ctrl + M + N.

Utilizar:

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

8) Presione la tecla de acceso directo guardada

Ver abajo el resultado:

ingrese la descripción de la imagen aquí

Abhishek
fuente
¿Dónde está el Explorador de macros? Estoy usando Eclipse 4.3.1 y no puedo encontrarlo.
Mohamed El-Nakib
1
¿Esto ni siquiera es Java?
Burak Karakuş
@CJBS - re: This code seems to be for Visual Basic.NETlo que sugeriría que es el IDE Visual Studio.
Jesse Chisholm
@JesseChisholm: ese era mi punto. El OP quiere Java, no VB, y apunta al IDE de Eclipse, no a VS.
CJBS
1
RIP respuesta. Si estaba usando Visual Studio, podría haber usado #regiony#endregion
PNDA