Programar y los {

Encuesta
Con ke opcion te kedas?
50%
28
50%
28
Hay 56 votos.
Bien, desde hace tiempo me asalta una duda bastante chorra, asi ke os invoco programadores!!!

Hay va la duda:

Cual creeis ke es la forma correcta/standart de escribir estas dos condicionales a la hora de programar y hacer un buen codigo legible???

OPCION A
if (x == 1) {
    printf("Hola Mundo");
    printf("\nLo ke sea");
}



OPCION B
if (x == 1)
{
    printf("Hola Mundo");
    printf("\nLo ke sea");
}


Voten y opinen [plas]
Pues depende de cada uno yo tiro mas por la B pero hay gente que dice que la correcta es la A asi que según cada uno, para unos será mas legible la B y para otros la A
La A of course. Si lo dicen Kernighan & Ritchie no hay nada mas que discutir :D. No en serio, las dos estan.

Salu2!
A mi me han enseñado la B y me la han vendido como la correcta, además he leído en muchos sitios que es la correcta y es la que uso porque me parece más legible, aunque la que mas he visto con diferencia en C es la B (en PHP diría que predomina más la A).

Yo creo que es cuestión de gustos.
La B pero...

if ( X==1 )
{
    printf( "Hola Mundo" );
}


[sonrisa]
Y no voto que suelo ser el que lo pregunta XD (vease el hilo anteriormente citado xD)

Aunque realmente el codigo seria:

if (x == 1)
       printf("\n\nHola mundo!!\n\n");


:Ð (solo teoricamente x) )

Salu2!
Obviamente lo que dice \-\adEs

- ferdy
bueno, aclarar dos cosas antes:

- sobre lo ke dice SiC002, no esta tabulado porke cuando hice el quote, juraria ke puse 4 espacios (por poner algo medio tabulado), pero finalmente nose porke no aparecieron ein?

- sobre lo de \-\adEs, ya se ke pa una sola linea no hacen falta los { y }, plantee mal ejemplo poniendo solo una linea dentro de el if

Ahora mismo edito el post original para ke no salgan mas kiskillosos... ¬¬
De los ejemplos que has puesto, ni uno ni otro. Lee el hilo que te han dicho:

if (x == 1) {
    printf("Hola Mundo");
    printf("\nLo ke sea");
}


- ferdy
Pitxardo escribió:- sobre lo de \-\adEs, ya se ke pa una sola linea no hacen falta los { y }, plantee mal ejemplo poniendo solo una linea dentro de el if


:P No te enfades hombre que es coña :) Lo decia por que ferdy "me dio unas clases" en el post que te han mencionado

Por cierto, lo de que se halla comido los espacios en los tabuladores es por que quote se los traga. Para estas cosas utiliza mejor la etiqueta code ;)

Salu2!
Pitxardo escribió:- sobre lo de \-\adEs, ya se ke pa una sola linea no hacen falta los { y }, plantee mal ejemplo poniendo solo una linea dentro de el if


:P No te enfades hombre que es coña :) Lo decia por que ferdy "me dio unas clases" en el post que te han mencionado

Por cierto, lo de que se halla comido los espacios en los tabuladores es por que quote se los traga. Para estas cosas utiliza mejor la etiqueta code ;)

Salu2!
Ale! una vez mas... arreglado!

y trankilo \-\adEs no me enfadado, era solo la una "bronca amigable", solo ke por aki sin tonos de voz ni nada, leyendolo parecia algo serio [oki] y me ha dao pereza poner el emoticon adecuado [sonrisa]

Bueno, aunke por votacion gana la B, parece ke la autentica forma es la A...

por cierto, cuando termine esto, tengo una pregunta para los expertos en SDL [inlove]
Es que deberías ponderar los votos en base al número de líneas que manejan los votantes :) No debe contar lo mismo mi opinión, que la de (por ejemplo) Linus Torvalds (/usr/src/linux/CodingStyle).

- ferdy
Una cosa.... si tengo un if con una sola sentencia a hacer si se cumpla la condición... ¿Qué es lo más correcto, poner los corchetes o no?
if (num==0){
printf("hola holita!");
}

o bien:
if (num==0)
printf("hola holita!");

edito... que me dejé los ; X-D
Pues para mí lo mas correcto sería quitar las llaves "{", y dejar un poco mas de sangría:

if (num==0)
   printf("hola holita!");


Salu2!
Sin llaves, y con la tabulacion correcta :)
¿ Nadie lee las referencias que se van mencionando en el hilo ?

- ferdy
Ferdy escribió:Es que deberías ponderar los votos en base al número de líneas que manejan los votantes :) No debe contar lo mismo mi opinión, que la de (por ejemplo) Linus Torvalds (/usr/src/linux/CodingStyle).

- ferdy


Esto se parece a lo de la SGAE [poraki]

Por cierto en cuanto a la encuesta y solo preocupandome de los corchetes, los pongo de la forma B, porque me parece mas lisible.
Yo soy de la opcion A aunque reconozco que tiro una millonesima parte de las lineas que tira Ferdy.

En el Kernighan eligen la opcion B para los ejemplos pero sin embargo reconocen que "la posición de las llaves es menos importante, aunque la gente mantiene apasionadas creencias. Hemos escogido una entre varios estilo populares. Coge un estilo que se ajuste a ti y entonces usalo consistentemente" (traducción literal). En el "tlc/tk engineering manual" de J.K.Ousterhout recomiendan la opcion A. Tambien recomiendan poner llaves aunquen haya solo una linea. Las convenciones sobre programacion de este libro se recomiendan para la asignatura de Arquitectura de Ordenadores de mi carrera.
Pitxardo escribió:Bueno, aunke por votacion gana la B, parece ke la autentica forma es la A...

Claro. Ahora vete a decirles a los señores de GNU (bash, glibc, gdb, gcc, binutils, gtk+, gimp... eso suman unos cuantos millones de SLOC, bastantes más que el kernel) que están programando en una forma que no es la "auténtica".

(edit) Ups, se me coló uno XD
Ferdy escribió:¿ Nadie lee las referencias que se van mencionando en el hilo ?
...
(/usr/src/linux/CodingStyle).

Debe ser, que no, la que tú comentas está en /usr/src/linux/Documentation/CodingStyle y nadie parece haberlo notado. :P

En el Kernighan eligen la opcion B

Nope, es la A.

En mi caso, mi recomendación es:
Coge un estilo que se ajuste a ti y entonces usalo consistentemente
...
Tambien recomiendan poner llaves aunquen haya solo una linea.

Que viene a ser lo que comentaba en el otro hilo.

Un saludo.
Claro. Ahora vete a decirles a los señores de GNU (bash, glibc, gdb, gcc, binutils, gtk+, gimp... eso suman unos cuantos millones de SLOC, bastantes más que el kernel) que están programando en una forma que no es la "auténtica".


Ya lo hemos discutido en otro hilo, ellos no son profetas :)

Por otro lado, hay mucho código GNU que no sigue ni sus mismas normas de estilo, por ejemplo, mezclando espacios y tabs para identar (no vaya a ser que alguien quiera leer el código :P))

- ferdy
Ferdy escribió:
Narf escribió:Claro. Ahora vete a decirles a los señores de GNU (bash, glibc, gdb, gcc, binutils, gtk+, gimp... eso suman unos cuantos millones de SLOC, bastantes más que el kernel) que están programando en una forma que no es la "auténtica".

Ya lo hemos discutido en otro hilo, ellos no son profetas :)

Ellos son LOS profetas.

Ferdy escribió:Por otro lado, hay mucho código GNU que no sigue ni sus mismas normas de estilo, por ejemplo, mezclando espacios y tabs para identar (no vaya a ser que alguien quiera leer el código :P))

Minucias :P. Si todo el mundo usase The One True Editor (si alguien tiene dudas de cuál es que le pregunte a google; todo el mundo sabe que google nunca miente) no tendrían problemas leyendo el código XD
Narf escribió:Ellos son LOS profetas.

Minucias :P. Si todo el mundo usase The One True Editor (si alguien tiene dudas de cuál es que le pregunte a google; todo el mundo sabe que google nunca miente) no tendrían problemas leyendo el código XD
Uuuuh... esto se va a poner feo XD.

Este hilo debería ser cerrado pero ya por algún moderador; un cierre preventivo :).

¡Saludos!
Yo tambien uso el estilo B, me es mas comodo.
bastian escribió:Nope, es la A.

Perdona, pero, por lo menos en el primer capitulo, donde dicen lo que puse antes, utilizan la opcion B, es decir, separando las llaves del resto.
La B sin dudarlo un momento. El ejemplo con la A es sencillo de ves ahora, pero...

while (juanito=tonto) {

if (pepe=true){
for (manolo=0;manolo>100;manolo++) {
printf("blablabla");
scanf("%s",&pepon);
}
}
}



VS

while (juanito=tonto)
{
if (pepe=true)
{
for (manolo=0;manolo>100;manolo++)
{
printf("blablabla");
scanf("%s",&pepon);
}
}
}


Qué queréis que os diga...con la A no sabes cuántas llaves tienes que cerrar. Con la B sí.
Zor escribió:Qué queréis que os diga...con la A no sabes cuántas llaves tienes que cerrar. Con la B sí.
No hay problema con la A siempre y cuando indentes bien.

¡Saludos!
Zor escribió:Qué queréis que os diga...con la A no sabes cuántas llaves tienes que cerrar. Con la B sí.

Para eso se puede usar la identación..

PD: Yo acostumbro a usar la A..

Edit: argh, no había leído a Cobo
Yo siempre he utilizado la A y seguiré con ella. Me parece más lógica, pero es cuestión de gustos claro.

Zor escribió:Qué queréis que os diga...con la A no sabes cuántas llaves tienes que cerrar. Con la B sí.


Lo mismo que Cobo y eTc_84, si se indenta de forma correcta no debería de haber confusiones por eso que dices. Será que he programado mucho en python y tengo muy marcado el hábito de tratar de indentar lo mejor posible :)

Salu2
Yo acostumbraba a usar el estilo B, pero desde que me vi obligado a programar en Java siempre uso el estilo A.

Pensaba que no, pero sin esos espacios en medio el código me parece más legible.
Realmente en mi caso depende del lenguaje en el que esté programando:

Bash: el que se usa generalmente en ebuilds.
C: K&R
C++: http://paludis.berlios.de/CodingStandards.html
Java: Sun Coding Conventions
Erlang y Haskell: Que quede 'agradable'.

- ferdy
a mi personalmente me gusta mas la A, y estaba por plantear la misma duda.

La A bien indentado me parece mas intuitiva.

Y ya que estamos, ahora que estoy "empezando" con C... que es mejor, una variable mas o una o varias operaciones matematicas simples mas? Y si en lugar de una operacion matematica, fuesen uno o varios if?

Y por ultimo, es mejor ahorrar variables, o que el codigo (mas bien el algoritmo) sea facil de entender?
Es decir, es mejor hacerlo de la manera obvia, o reutilizar por ejemplo una variable de una manera ingeniosa?
Es que la verdad, me divierto mas haciendo los ejercicios de la segunda manera intentando hacerlo todo de manera ingeniosa y economica..

en ejercicios donde la gente ha usado 16 variables de tipo long y una float, yo he usado 1 long y una float por ejemplo. Es un caso extremo, y la verdad creo que mi forma queda mas intuitiva, por que yo en lugar de hacer:

c=a+b;
printf("blabla %ld", c);
hago:
printf("blabla %d", a+b);
y bueno, usando truquitos matematicos y tal.... eso esta bien hecho o es preferible hacerlo de la otra manera? En honor a la verdad, he de decir que la gente que lo hace con 17 variables es la primera vez que programan algo, y yo digamos que he sido bastante autodidacta durante bastante tiempo... pero nunca nadie me ha dicho como es la forma correcta, por eso pregunto a ver...
Vaya disquisiciones;
Yo creo que las dos son igualmente legibles, es obviamente mas comodo escribir la A. (Yo he votado la B que si no mi profe me pega [Ooooo] )

a mi personalmente me gusta mas la A, y estaba por plantear la misma duda.

La A bien indentado me parece mas intuitiva.

Y ya que estamos, ahora que estoy "empezando" con C... que es mejor, una variable mas o una o varias operaciones matematicas simples mas? Y si en lugar de una operacion matematica, fuesen uno o varios if?

Y por ultimo, es mejor ahorrar variables, o que el codigo (mas bien el algoritmo) sea facil de entender?
Es decir, es mejor hacerlo de la manera obvia, o reutilizar por ejemplo una variable de una manera ingeniosa?
Es que la verdad, me divierto mas haciendo los ejercicios de la segunda manera intentando hacerlo todo de manera ingeniosa y economica..

en ejercicios donde la gente ha usado 16 variables de tipo long y una float, yo he usado 1 long y una float por ejemplo. Es un caso extremo, y la verdad creo que mi forma queda mas intuitiva, por que yo en lugar de hacer:

c=a+b;
printf("blabla %ld", c);
hago:
printf("blabla %d", a+b);
y bueno, usando truquitos matematicos y tal.... eso esta bien hecho o es preferible hacerlo de la otra manera? En honor a la verdad, he de decir que la gente que lo hace con 17 variables es la primera vez que programan algo, y yo digamos que he sido bastante autodidacta durante bastante tiempo... pero nunca nadie me ha dicho como es la forma correcta, por eso pregunto a ver...


Yo pienso que consiste en encontrar el equilibrio entre simplicidad y economia de memoria. Hacer los ejercicios de manera ingeniosa no esta mal, pero deben ser facilmente legibles, si no cuando vuelvas a mirarlos 3 meses despues tendras que descifrar ese mismo ingenio que tu mismo aplicaste [fumando]

El ejemplo que has puesto es muy rudimentario pero aun asi depende de si la variable c la vas a querer usar para algo mas, despues. Si solo vas a usarla en el printf no la declares, no es util.
Zeo01, depende de varias cosas; pero por lo general es preferible un algoritmo que se pueda leer. La optimización es, en principio, trabajo del compilador. Aunque es bueno ponerselo fácil por ejemplo haciendo uso de la optimización de la última llamada (last call optimization), o indicándole que ciertas variables las debe mantener en registros, declarando las variables justo en el momento en el que se vayan a usar (depende de tu compilador), ...

- ferdy
e votado Opción B me parece lo mas correcto para tenerlo ordenado
el_Salmon escribió:Perdona, pero, por lo menos en el primer capitulo, donde dicen lo que puse antes, utilizan la opcion B, es decir, separando las llaves del resto.

Creo que te estás liando. En las funciones es el único caso (si no recuerdo mal) en el que se utiliza la opción B. En todos los demás (if's, for's, while's y demás ) utilizan la opción A.

PD: Perdón por el refloating, estaba de vacaciones :P
Un saludo.
la verdad es que me gusta más separarlo, pero como en la uni nos obligan a usar vim para escribir el código suelo usar el método A porque así me ahorro líneas y puedo moverme más rápidamente con las flechas del teclado.
40 respuestas