Formato de sentencias if

5 minutos de lectura

Esto no es una guerra santa, esto no es una cuestión de “cuál es mejor”.

¿Cuáles son las ventajas de usar el siguiente formato para bloques if de una sola declaración?

if (x) print "x is true";

if(x) 
    print "x is true";

Opuesto a

if (x) { print "x is true"; }
if(x) {
    print "x is true";    
}

Si formatea su declaración única ifs sin corchetes o conoce a un programador que lo haga, ¿qué te llevó a adoptar este estilo en primer lugar? Estoy específicamente interesado en los beneficios que esto le ha traído.

Actualizar: Como la respuesta más popular ignora la pregunta real (incluso si presenta el consejo más sensato), aquí hay un resumen de los profesionales sin paréntesis.

  1. compacidad
  2. Más legible para algunos
  3. Los corchetes invocan el alcance, que tiene una sobrecarga teórica en algunos casos

  • No puede seguir “esto no es lo que es mejor” con “cuáles son los pros”. Ambos son comparaciones.

    – John Sheehan

    18 de septiembre de 2008 a las 22:10

  • Los pros son argumentos a favor, los contras son argumentos en contra. Toda decisión tiene pros o contras. “Mejor” es un juicio en el que decide qué pros y contras se adaptan mejor a su situación particular.

    – Alan Tormenta

    18 de septiembre de 2008 a las 22:23

  • ¿No es esta una de las preguntas explícitamente “prohibidas” por Jeff en algún momento? ¿Qué puede ganar alguien leyendo esto?

    – Programador fuera de la ley

    30 de septiembre de 2008 a las 20:19

  • Para una pregunta etiquetada como ‘c’, es sorprendente ver notaciones que no son C como ‘print "x is true";

    –Jonathan Leffler

    10 de julio de 2009 a las 5:36

  • @Jonathan es solo un pseudocódigo. Etiqueté la pregunta c porque, en mi experiencia, los codificadores de c tienden a usar la forma corta sin paréntesis la mayoría de las veces y quería su perspectiva sobre el tema.

    – Alan Tormenta

    10 de julio de 2009 a las 7:28

No me gusta mucho ningún estilo que coloque la prueba y el cuerpo del if en la misma línea.

Esto se debe a que compartir la línea hace que sea imposible establecer un punto de interrupción en el cuerpo del if en muchos depuradores porque los puntos de interrupción generalmente se basan en el número de línea.

  • Estoy de acuerdo, pero toneladas de programadores parecen estar en desacuerdo. Deben tener sus razones.

    – Alan Tormenta

    18 de septiembre de 2008 a las 22:44

  • Visual Studio 2008 (¿2005?) puede depurar por declaración, no por línea.

    – spulson

    19 de septiembre de 2008 a las 1:21

  • ¿Qué pasa con “if (blah) { return; }”? Me parece bastante inofensivo, incluso si está tratando de establecer un punto de interrupción allí.

    – Parapa

    19 de septiembre de 2008 a las 1:52

  • Sí, pero si divide cada declaración if en la prueba y la instrucción en líneas separadas, entonces debería hacerlo para las declaraciones if-x-return, en aras de la coherencia.

    –Aleksandar Dimitrov

    19 de septiembre de 2008 a las 6:59

  • Siempre hay excepciones (hablar de un nudo lógico…) “Una consistencia tonta es el duende de las mentes pequeñas”.

    – Matt Dillard

    19 de septiembre de 2008 a las 19:06

  • Bien pensado: supongo que esa es una de las ventajas de algo como Python, donde la sangría tiene un valor sintáctico.

    – Rich Bradshaw

    20 de septiembre de 2008 a las 13:45

  • pd… NUNCA anide ifs sin agregar llaves si aún no están allí. El concepto de que alguien pueda hacer lo que dijo el autor me duele el alma.

    – Bill K.

    14 de enero de 2009 a las 18:11

siempre uso

if(x) 
{
    print "x is true";    
}

omitir las llaves puede hacer que alguien mantenga el código pensando erróneamente que está agregando a la cláusula if si agrega una línea después de la línea actual.

  • Aparte: es por eso que también me gusta la conciencia de sangría de Python. Vas a sangrar de todos modos, también podrías hacer que signifique algo. Este argumento solo ocurre en idiomas que hacen que los caracteres de bloqueo ({ } en este caso) sean opcionales/condicionales.

    – Benjamín Autin

    19 de septiembre de 2008 a las 4:06

  • Estoy de acuerdo con Ferruccio (stackoverflow.com/questions/97506/formatting-of-if-statements/…) en que su argumento es bastante débil. Este es un error tan fácil de cometer que también está inculcado en la cabeza de los nuevos programadores hasta el punto en que ellos (al menos, yo) lo reconocen y lo corrigen inconscientemente.

    – Chris Lutz

    10 de julio de 2009 a las 5:27

yo suelo

if (x)
{
    DoSomething();
}

para múltiples líneas, pero prefiero líneas sin paréntesis:

if (x)
   DoSomething();
else
   DoSomethingElse();

Encuentro los corchetes extraños visualmente ofensivos, y nunca he cometido uno de los errores mencionados anteriormente al no agregar corchetes al agregar otra declaración.

  • Aparte: es por eso que también me gusta la conciencia de sangría de Python. Vas a sangrar de todos modos, también podrías hacer que signifique algo. Este argumento solo ocurre en idiomas que hacen que los caracteres de bloqueo ({ } en este caso) sean opcionales/condicionales.

    – Benjamín Autin

    19 de septiembre de 2008 a las 4:06

  • Estoy de acuerdo con Ferruccio (stackoverflow.com/questions/97506/formatting-of-if-statements/…) en que su argumento es bastante débil. Este es un error tan fácil de cometer que también está inculcado en la cabeza de los nuevos programadores hasta el punto en que ellos (al menos, yo) lo reconocen y lo corrigen inconscientemente.

    – Chris Lutz

    10 de julio de 2009 a las 5:27

if
{
// code
}
else 
{
// else code
}

porque me gusta cuando los bloques de código se alinean (incluidas las llaves).

  • ¡Eso es terrorismo contra la estética del código! No me gustaría trabajar con ese código.

    – piotr

    10 de julio de 2009 a las 5:10

  • Si los comentarios (código) estaban sangrados, esta es la forma que encuentro más legible. Si el código dentro de las llaves no estaba sangrado, entonces es horrible. Por lo general, no coloco las llaves en su lugar a menos que haya varias declaraciones en el bloque, pero no me importa cuando se insertan de manera uniforme.

    –Jonathan Leffler

    10 de julio de 2009 a las 5:40

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad