Aquí podría ser tu PUBLICIDAD


Diferentes formas de escribir la declaración "si"

votos
19

He visto diferentes formas de escribir una ifdeclaración.

¿Cual prefieres y porque?

Ejemplo 1:

if (val % 2 == 1){output = “Number is odd”;}else{output = “Number is even”;} 

Ejemplo 2:

if (val % 2 == 1)
{
    output = “Number is odd”;
}
else
{
   output = “Number is even”;
}

Ejemplo 3:

if (val % 2 == 1)
output = “Number is odd”;
else
output = “Number is even”;

Ejemplo 4:

if (val % 2 == 1){
output = “Number is odd”;
} else {
output = “Number is even”;
}

Pregunta similar:

¿Por qué se considera una mala práctica omitir llaves?

Publicado el 12/03/2009 a las 16:27
fuente por usuario egyamado
En otros idiomas...        العربية       

20 respuestas

votos
44

Para casos como este, también está el operador condicional:

output = (val % 2 == 1) ? "Number is odd" : "Number is even";

Si definitivamente vas a usar un "si" usaría la versión 2 o la versión 4, dependiendo del resto de tu estilo de refuerzo. (En el trabajo uso 4; para proyectos personales uso 2.) Lo principal es que hay llaves incluso en declaraciones simples.

Por cierto, para probar la paridad es un poco más rápido de usar:

if ((val & 1) == 1)
Respondida el 12/03/2009 a las 04:32
fuente por usuario Jon Skeet


Aquí podría ser tu PUBLICIDAD


votos
16

Versión 2. Siempre incluyo los corchetes porque si alguna vez necesita poner más de una línea bajo el condicional, no tendrá que preocuparse por poner los corchetes en una fecha posterior. Eso, y se asegura de que TODAS sus declaraciones if tengan la misma estructura, lo que ayuda cuando está escaneando código para cierta declaración if.

Respondida el 12/03/2009 a las 04:33
fuente por usuario Bryan Marble

votos
10

Yo uso la versión 2.

Una razón para usar llaves se vuelve más clara si no tienes otra.

if(SomeCondition)
{
  DoSomething();
}

Si luego necesita agregar otra línea de código, es menos probable que tenga un problema:

if(SomeCondition)
{ 
  DoSomething();
  DoSomethingElse();
}

Sin las llaves podrías haber hecho esto:

if(SomeCondition)
   DoSomething();
   DoSomethingElse();
Respondida el 12/03/2009 a las 05:47
fuente por usuario Khadaji

votos
9

Yo personalmente prefiero 3. Las llaves extra agregan demasiado ruido visual innecesario y espacio en blanco.

De alguna forma puedo ver el razonamiento de 2/4 para reducir los errores, pero personalmente nunca he tenido un error porque pensar en líneas adicionales estaba dentro de una declaración if. Utilizo C # y Visual Studio para que mi código siempre esté muy bien formateado. Sin embargo, esto podría ser un problema si fuera un programador de estilo de bloc de notas.

Respondida el 12/03/2009 a las 06:40
fuente por usuario Jacob Adams

votos
5

Ninguna de las anteriores.

Si mi bloque de ejecución solo tiene una línea (incluso si es una gran declaración), entonces no utilizo llaves, pero sí la sangro, similar a la # 3

if (num > 3)
     print "num is greater than 3";
else
     print "num is not greater than 3";

Un ejemplo con múltiples declaraciones que no necesitan llaves:

if (num > 3)
    for (int i = 0; i < 100)
        print i + "\n";
else
    print "booya!";

Dicho esto, la respuesta de Jon Skeet en esta pregunta es la mejor

Respondida el 12/03/2009 a las 08:15
fuente por usuario belgariontheking

votos
5

Prefiero # 2. Fácil legibilidad

Respondida el 12/03/2009 a las 04:30
fuente por usuario RuudKok

votos
3

Es más importante ser coherente que seleccionar el mejor.

Estos estilos tienen diferentes ventajas e inconvenientes, pero ninguno es tan malo como mezclarlos dentro de un proyecto o incluso una unidad de compilación o dentro de una función.


El operador ternario es la elección obvia para este código específico. Para simples declaraciones individuales if/elseque no pueden expresarse de otra manera, preferiría un caso 3 adecuadamente sangrado:

if (val % 2 == 1)
    output = “Number is odd”;
else
    output = “Number is even”;

Entiendo la motivación detrás de "usar siempre llaves", pero personalmente nunca me han mordido por su omisión (OK, una vez. Con una macro).

De los estilos anteriores, elegiría (2). (4) estaría bien si se sangra "apropiadamente".
(1) Atribuiría a un desarrollador joven que, con suerte, crecerá a partir del "código compacto", o alguien que no puede pagar un monitor decente. Aún así, iría con eso si fuera el estilo local.

Respondida el 12/03/2009 a las 10:36
fuente por usuario peterchen

votos
3

Estoy de acuerdo con el operador ternario. Muy poco utilizado en el código que encuentro, y creo que es mucho más fácil y más agradable de leer que todos los corchetes y sangrías adicionales que se necesitan para escribir una instrucción if / else.

Respondida el 12/03/2009 a las 06:20
fuente por usuario Bryan Rowe

votos
2

Es extraño que nadie haya mencionado esto:

if ( x == 1) {
   ...
}
else {
   ...
}

Para mí, esta es la única forma correcta, por supuesto :-)

Respondida el 12/03/2009 a las 09:12
fuente por usuario dmityugov

votos
2

Yo uso la versión 2.

Respondida el 12/03/2009 a las 04:30
fuente por usuario Grzenio

votos
0

usando las llaves se sugiere, he visto algún problema con la declaración else if sin tirantes, (no recuerdo exactamente), es decir Declaración bajo, si no se ha ejecutado, cuando he añadido la misma con los apoyos a continuación, sólo funcionaba. (Con Visual studio & C # 4.0).

Respondida el 28/10/2013 a las 12:33
fuente por usuario Jay

votos
0

Declaraciones cortas simples:

if (condition) output = firstChoice;
else doSomethingElse();

Declaraciones múltiples o largas

if (condition) {
   output = firstChoice;
   ...
} else {
   ...
}
Respondida el 12/03/2009 a las 10:46
fuente por usuario TrayMan

votos
0

La versión n. ° 2 para mí: la más fácil de ver, la más fácil de leer, fácil de ver donde comienza y termina el si, lo mismo para el resto, no tienes que preocuparte por poner entre paréntesis si deseas agregar más de una declaración.

Respondida el 12/03/2009 a las 09:31
fuente por usuario Surgical Coder

votos
0

Personalmente, hay dos métodos que considero buenas prácticas:

Para if-blocks, solo hay esta manera:

if(...)
{
    // ...
}
else if (...)
{
    // ...
}
else
{
    // ...
}

Esta es la forma más segura y comprensible de escribir if-else-blocks.

Para los trazadores de líneas uno (líneas de trazado verdaderas que son comprensibles en una línea), puede utilizar el operador ternario.

var objectInstance = condition ? foo : bar;

// Or the binary operator when dealing with null values
var objectInstance = condition ?? foo;

No debe llamar a métodos que hagan algo que no ayude a la asignación actual.

No usaría ninguna otra manera que las mencionadas anteriormente.

Respondida el 12/03/2009 a las 08:19
fuente por usuario mbillard

votos
0

Yo uso un # 2 con un cambio menor

if (condition1) 
{
      doStuff();
} else 
{
      doSomethingElse();
}
Respondida el 12/03/2009 a las 08:11
fuente por usuario Ben Reeves

votos
0

Personalmente prefiero la versión 2. Pero dado que solo está formateando, no importa. ¡Usa lo que sea mejor para ti y para los miembros de tu equipo!

Respondida el 12/03/2009 a las 08:10
fuente por usuario Alexander

votos
0

Yo siempre usaría el # 2. # 4 es un diseño realmente horrible y solo lo haría alguien que cree que un método debe tener un tamaño de pantalla único y hará todo lo posible por incluirlo, en lugar de refactorizar el código.

Respondida el 12/03/2009 a las 08:09
fuente por usuario Sean

votos
0

Los usaría en el siguiente orden: 1) el operador ternario 2) ejemplo 3, pero sangrado adecuadamente 3) o bien 2 o 4, básicamente son los mismos. Me gustaría ir con lo que fue el general styl donde trabajé.

Estoy de acuerdo con lo que dijo Jake sobre omitir las llaves innecesarias. Nunca he causado o visto un error causado por el nuevo código que se agrega y alguien pensando que eran parte de una declaración if, pero no lo fueron por la falta de llaves. Si alguien alguna vez hiciera eso, los ridiculizaría sin piedad.

Tendrás que torturarme para que use el número 1.

Respondida el 12/03/2009 a las 06:53
fuente por usuario Kevin

votos
0

El ejemplo 2 es, sin duda, el enfoque menos propenso a errores. Por favor, mira esta respuesta que di a una pregunta similar por el motivo:

¿Cuál es el estilo preferido para los enunciados de decisión única y de acción?

Aunque el valor predeterminado de Visual Studio para usar llaves es poner llaves en una nueva línea (mi método preferido), el libro de Lineamientos de Diseño del Marco (primera edición) de Krzysztof Cwalina y Brad Abrams propone una convención diferente, ejemplo 4, colocando la abrazadera de apertura en el fin de una ifdeclaración anterior (página 274). También dicen " Evite omitir llaves, incluso si el lenguaje lo permite".

Al no tener la segunda edición a mano, no podría decir si estas convenciones han cambiado o no.

Respondida el 12/03/2009 a las 06:46
fuente por usuario Kev

votos
0

Yo prefiero 4, pero creo que 2 definitivamente también es bueno.

Respondida el 12/03/2009 a las 06:43
fuente por usuario Todd Friedlich


Aquí podría ser tu PUBLICIDAD