2010-06-09 10 views
21

Mientras escribía otro interruptor en Eclipse, que una vez más se encontró con un lugar extraño (para mí, al menos) indentación por defecto, que se aplica a las declaraciones 'switch':¿Cuál es la forma preferida de sangrar casos en un interruptor?

switch (i) { 
case 1: 
    ... 
case n: 
    ... 
} 

tiendo a preferir otra manera:

switch (i) { 
    case 1: 
     ... 
    case n: 
     ... 
} 

¿Qué modo es más legible y agradable para usted? Todavía no estoy al cien por ciento decidido lo que es mejor para mí, por lo que me gustaría atenerme a lo que es mejor para otras personas que leerían mi código.

Por cierto, puede cerrar esta pregunta si esto es demasiado subjetivo. :)

+0

Mi Eclipse de guiones predeterminados como segunda forma. ¿Tal vez un error en el formateador de código de su Eclipse? – BalusC

+0

Visual Studio también de forma predeterminada en 2da forma. – Naveen

+2

@BalusC: solo el formateador "Eclipse 2.1 [incorporado]" lo formatea con sangría extra. Tanto el "Eclipse [incorporado]" como las "Convenciones de Java [incorporadas]" no utilizan sangrías para la declaración del caso (simplemente marcó esto en Eclipse 3.5). –

Respuesta

0

utilizo segunda manera:

switch (i) { 
    case 1: 
     ... 
    case n: 
     ... 
} 
15

Yo prefiero la segunda forma también. Pero es más importante permanecer consistente dentro de una aplicación en particular y/o dentro de un equipo en particular que para sangrar de una forma u otra.

8

que tienden a sangrar todos los órganos de la estructura de control de una sola pestaña (4space) de esta manera:

switch (i) 
{ 
    case 1: 
     ... 
    case n: 
     ... 
} 

considero el interruptor sea la estructura de control exterior y la parte directivas caso del cuerpo (aunque son parte de la estructura de control).

Entonces yo más tabulación de sangría cada caso, así:

switch (i) 
{ 
    case 1: 
     do_something(); 
    case n: 
     do_something_else(); 
} 

Me parece que este es el formato más legible para el caso interruptor de construcción.

Como jkohlhepp ha mencionado la conformidad con las convenciones de estilo de código del proyecto en el que está trabajando es lo más importante, si está trabajando en un proyecto que no tiene ninguno, vale la pena desarrollarlo.

+1

+1 Yo también coloco la llave de apertura en una nueva línea. – onedaywhen

+4

uggg, el bracket abierto de un bloque debe ir en la misma línea que la definición de bloque. – Jay

+0

-1 dado que colocaste la abrazadera de apertura en una nueva línea (obviamente no estoy bajando tu respuesta de verdad, pero realmente odio eso), pero +1 (de verdad esta vez) para cómo sangrar todo lo demás. – SlackOverflow

0

El primer método tiene sentido lógico (para mí), sin embargo, también prefiero el segundo método. Creo que la mayoría de nosotros estamos condicionados a esperar que el código dentro de llaves sea sangrado.

7

De acuerdo con "official" Java Code Conventions, es la primera variante (sin indentación adicional para el caso).

+0

Es bueno que las convenciones de Oracle (o de hecho, Sun) todavía estén archivadas, pero la información se actualizó por última vez en 1999, por lo que no es válida por el momento. [Guía de estilo de Java] (https : //google.github.io/styleguide/javaguide.html#s4.8.4-switch) recomienda sangrar el contenido del bloque, aunque – asgs

1

La primera es la indentación estándar de la caja de interruptores.

switch (i) { 

case 1: 
    .... // Here you can write more code in a row than using the second way 
    break; 
case n: 
    .... 
    break; 
default: 
    .... 
    break; 
} 

Aviso la nueva línea insertada entre el interruptor (i) y el caso 1:

1

Si prefiere el segundo caso, entonces la consistencia deberá consultar también sangrar la parte else de una instrucción if:

if(test) 
    do_something(); 
    else 
     do_something_else(); 

La mayoría de las personas no hacen esto, y la convención es mantener las ramas en el mismo nivel que el enunciado, por lo tanto Java prefiere el primero ya que la prueba del enunciado caso y las ramas de código son consistentes en un nivel si/entonces/else construc t.

he flip-fracasó entre ellos también, pero finalmente terminó prefiriendo la primera:

switch (i) { 
case 1: 
    ... 
case n: 
    ... 
} 
+0

lo siento, pero ¿por qué 'else' debe sangrarse aún más? está en el s nivel de ame como 'if', mientras que' case' está dentro de 'switch'. La [Guía de estilo de Java] de Google (https://google.github.io/styleguide/javaguide.html#s4.8.4-switch), que prácticamente se ha convertido en estándar actualmente, recomienda sangrar los contenidos del bloque Switch. – asgs

Cuestiones relacionadas