2010-03-04 25 views
71

Las clases de Java generalmente se dividen en "bloques" lógicos. ¿Hay una convención para marcar estas secciones? Idealmente, sería respaldado por los principales IDEs.¿Cómo marcar secciones lógicas de código en comentarios de Java?

Yo personalmente uso este método:

//// Section name here //// 

Sin embargo, algunos editores parecen tener problemas con esto.

A modo de ejemplo, en el código de Objective-C puede utilizar este método:

#pragma mark - 
#pragma mark Section name here 

Esto dará lugar a un menú en XCode que tiene este aspecto:

alt text

+3

como desarrollador de iOS, esto es lo que más extrañé cuando comencé con Android Studio –

+1

downvoted: con IDEs e idiomas modernos es una práctica deficiente. Si tiene que seccionar su código, probablemente ya esté rompiendo el Principio de Responsabilidad Individual y es mejor dividirse en diferentes clases/archivos. Si hay varios editores, probablemente se desincronizará después de un tiempo de todos modos, ya que algunos seguirán esto, algunos volverán a configurar y reorganizar el código, o las acciones de guardar y formatear automáticamente lo romperán. –

+0

downvoted: Estoy de acuerdo con @ f.carlsen. Si estructura su clase con comentarios, es muy probable que rompa [Principio de Responsabilidad Individual] (https://en.wikipedia.org/wiki/Single_responsibility_principle). – Schrieveslaach

Respuesta

53

Yo personalmente uso de 80 caracteres separadores de línea, así:

public class Client { 

    //================================================================================ 
    // Properties 
    //================================================================================ 

    private String name; 
    private boolean checked; 

    //================================================================================ 
    // Constructors 
    //================================================================================ 

    public Client() { 
    } 

    public Client(String name, boolean checked) { 
     this.name = name; 
     this.checked = checked; 
    } 

    //================================================================================ 
    // Accessors 
    //================================================================================ 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public boolean isChecked() { 
     return checked; 
    } 

    public void setChecked(boolean checked) { 
     this.checked = checked; 
    } 

} 

Por supuesto, esto puede parecer un poco exagerado para una pequeña POJO tal, pero créeme, que resultó ser muy útil en algunos grandes proyectos donde tuve que navegar a través de grandes archivos fuente y encontrar rápidamente los métodos que me interesaban. También ayuda a comprender la estructura del código fuente.

En Eclipse, he creado un conjunto de plantillas personalizadas (Java -> Editor -> Plantillas en el cuadro de diálogo de preferencias de Eclipse) que generan esas barras, por ej. - SEPA (separador de descriptores de acceso) - Sepp (separador de Propiedades) - sepc (separador de Constructores) - etc.

También he modificado el estándar "nueva clase" plantilla (Java -> Estilo de código -> Plantillas de código en la pantalla Preferencias de Eclipse)

Además, hay un antiguo complemento de Eclipse llamado Coffee-bytes, que mejora la forma en que Eclipse dobla partes del código. No sé si todavía funciona, pero recuerdo que se podían definir zonas plegables arbitrarias añadiendo comentarios especiales, como // [SECCIÓN] o algo así. Todavía podría funcionar en revisiones recientes de Eclipse, así que échale un vistazo.

4

Por lo como sé, no existe una especificación compatible para agrupar a los miembros de la clase. Puede usar la convención de comentarios que quiera, pero es probable que no sea compatible con ninguna herramienta.

Es mejor agrupar miembros relacionados en clases separadas mediante herencia o agregación. Esto se considera un buen estilo OOP

+4

La división de secciones de código parece solo posible en teoría. Por ejemplo, tome una clase Cliente con atributos como el nombre y una colección de "facturas". Me encantaría poder dividir esto en una sección "nombre" que contenga getters/setters para el nombre y una sección "facturas" que contenga métodos para agregar/eliminar facturas. Parece poco práctica para dividir estas arriba en una jerarquía de clases que sólo se puede añadir un atributo por clase, es decir, "NamedEntity", "NameAndAddressEntity", "Invoicable", ... – Frederik

6

Me gustó eso también cuando estaba usando xcode. Para eclipse utilizo ctrl + o (esquema rápido) para navegar a través de una clase Java.

6

Usar comentarios/marcadores innecesarios en el código para ayudar a trabajar puede no ser una buena práctica. Tengo poca idea sobre el desarrollo de xcode y java pero todos los principales IDE soportan que los miembros sin marcadores especiales como eclipse muestren los métodos y miembros usando la vista de esquema que se puede activar usando ctrl+O, Intellij (que prefiero usar más en mac y una edición de comunidad también) tiene el mismo concepto de esquema y se puede acceder rápidamente usando (ctrl + f12). Por lo tanto, mi punto aquí es que no utilices marcas innecesarias en el código ya que todos (o al menos buenos/cuerdos) IDE pueden hacerlo automáticamente.

+2

están de acuerdo, los marcadores de sección sólo se suman a la confusión visual. Tu clase debería estar lo suficientemente enfocada como para hacer que estas cosas sean irrelevantes. –

+14

Claro, pero tener métodos agrupados en secciones lógicas y marcadas puede ayudar a imponer el orden visual en lo que de otra manera sería una lista plana de métodos. A veces no sabes exactamente qué método deseas, y es bueno tener en cuenta todos los métodos relacionados a la vez, y tienes una idea de que estás viendo el alcance completo del código relacionado. –

2

Un moderno IDE le permite ver su código de muchas maneras diferentes e incluso reorganizarlo. Eclipse incluso te permite ver la definición del código en el que tienes el cursor en otro panel.

Cualquier reorganización automática de su código, hará que tal marcado se descomponga.

Si desea agrupar, considere la posibilidad de agrupar las cosas que pertenecen en la misma clase y las que no pertenecen en clases diferentes.

14

Eclipse define @category javadoc annotation (vaya a la sección marcada "Soporte de categoría") que permite filtrar por categoría en la vista de esquema. No es exactamente lo que quieres. Me sorprende que nadie haya escrito un plugin de Eclipse que ofrezca una vista similar a su captura de pantalla.

+0

En la mayoría de las vistas de Java, sin embargo, es posible filtrar los miembros de la clase según sus categorías, a fin de ocultarlos como getters y setters predeterminados, por ejemplo. – Riduidel

+0

no tengo idea de por qué no puedo usar @category en Android Studio, ¿sabes qué puedo hacer para lograr el mismo comportamiento en él? – MiguelHincapieC

0

Si puede agrupar sus métodos, haga otra clase específicamente para ese concepto que desee capturar en una sección. Adelante, crear archivos es gratis.

-12

Para IntelliJ me gusta:

 public void ________________INIT__________________() {}; 

ve bastante en la estructura de archivos!

+3

Esto parece una muy mala solución. ¿Por qué declarar métodos adicionales cuando su objetivo es la organización del código? – Nate

+1

Eso es para segmentar todo el archivo en la vista de Estructura. – P5ycH0

+1

esto es solo uno que buscando realmente en el estudio de Android, propongo que poseas como respuesta y voy a usar – user170317

91

Para intellij/android studio existe una solución increíble.
Inicio con:
//region Description
y terminar con:
//endregion

El acceso directo para que se encuentre en el menú se puede abrir con Comando + Alt + T (Mac) o Ctrl + Alt + T (Windows)

También puede agregar su propia línea para una separación visual adicional si la necesita. La región se puede contratar y expandir a voluntad con los botones +/- como cualquier función. También puede navegar entre las regiones con Comando +Alt +Período (Ctrl +Alt +Período)

Source.

Ejemplo:

//region Parceler Implementation 
//--------------------------------------------------------------------------------------- 
@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeParcelable(this.die, 0); 
    dest.writeParcelable(this.dieSprite, 0); 
} 

private DieVm(Parcel in) { 
    this.die = in.readParcelable(Die.class.getClassLoader()); 
    this.dieSprite = in.readParcelable(Sprite.class.getClassLoader()); 
} 

public static final Parcelable.Creator<DieVm> CREATOR = new Parcelable.Creator<DieVm>() { 
    public DieVm createFromParcel(Parcel source) { 
     return new DieVm(source); 
    } 

    public DieVm[] newArray(int size) { 
     return new DieVm[size]; 
    } 
}; 
//--------------------------------------------------------------------------------------- 
//endregion 
+0

Esto es increíblemente útil Gracias Andrey. Por cierto, estoy usando el atajo de teclado del eclipse y no creo que los atajos funcionen para mí, pero la '// región' funciona muy bien – ThinkBonobo

+2

No veo ninguna manera de que esto aparezca en la vista de estructura, entonces estoy sigue utilizando miembros falsos vacíos (junto con suprimir la advertencia no utilizada). – Tom

+1

¿hay alguna forma de mostrar esas regiones en Android Studio (vista de estructura)? – MiguelHincapieC

0

Además de la respuesta de Andrey proporcionado, para usar // región // endRegion, insertamos [letras BigAscii] [1] en las principales secciones de código. Cuando se desplaza rápido, realmente se destaca. Una desventaja de este enfoque es que no puedo buscarlo, por lo que necesitaría agregar un término de búsqueda justo debajo del "banner" como lo hago a continuación.

Blockquote

// _  _____   _____     _ _ 
// | | | __ \ /\ | __ \  /\  | | | | 
// | | | | | |/\ | |__) | /\ _ _| |_| |__ 
// | | | | | |/ /\ \ | ___/ //\ \| | | | __| '_ \ 
// | |____| |__|/____ \| |  /____ \ |_| | |_| | | | 
// |______|_____/_/ \_\_|  /_/ \_\__,_|\__|_| |_| 
// 
// Search here with: LDAP Auth 

[1]: http://patorjk.com/software/taag/#p=display&c=c%2B%2B&f=Big&t=LDAP Aut

0

me gustaría utilizar javadoc; o utilice la siguiente como un simple "separador" (individual o 3 líneas):

/** RecyclerOnItemClickListener */ 

/** 
* RecyclerOnItemClickListener 
*/ 

Para que en IDE que aparece en un color diferente que no sea el discreto comentado gris.

Cuestiones relacionadas