2008-10-23 5 views
5

que he visto este formato utilizado para las listas delimitados por comas en un cierto código C++ (aunque esto podría aplicarse a cualquier idioma):¿Cuál es la ventaja de este peculiar formateo?

void function( int a 
       , int b 
       , int c 
      ) 

Me preguntaba por qué alguien usar que más de un formato más común como :

void function (int a, 
       int b, 
       int c 
      ) 

Respuesta

17

Eso es un estilo de codificación bastante común al escribir sentencias SQL:

SELECT field1 
    , field2 
    , field3 
-- , field4 
    , field5 
FROM tablename 

Ventajas:

  • le permite añadir, quitar o reorganizar los campos fácilmente sin tener que preocuparse de que la última coma al final
  • Le permite comentar fácilmente una fila (TSQL usa "-") sin estropear el resto de la instrucción.

No creo que quieras reorganizar el orden de los parámetros en una función tan frecuente como lo haces en SQL, así que tal vez sea solo el hábito de alguien.

La capacidad de comentar uno de ellos dependerá del idioma específico que se utilice. No estoy seguro acerca de C++. Sé que VB.Net no lo permitiría, pero eso se debe a que requiere un carácter de continuación (_) para dividir las sentencias entre líneas.

+0

El segundo bit se aplica a cualquier idioma que tenga un marcador de "comentario al final de la línea". Eso incluye C++, C#, Java, JavaScript, VB, etc., etc. – AaronSieb

+0

... cualquier idioma que no pueda tolerar un ',' al final de la lista – Javier

+0

Bueno, VB y VB.Net no lo harán permite dividir arbitrariamente sentencias en múltiples líneas, por lo que esta técnica no funcionará allí. – BradC

3

Es más fácil agregar un parámetro al final comenzando al duplicar el parámetro anterior (línea).

Tiene sentido cuando está seguro de que el primer parámetro nunca cambiará, que a menudo es el caso.

1

El único beneficio que vería, es cuando agrega un parámetro, solo tiene que copiar y pegar la última línea, ahorrándole las pulsaciones de teclas adicionales de la posición de coma de edición y tal.

+0

y dada la facilidad con que los ides de hoy hacen la duplicación de la última línea, puede ser una joya. (netbeans ctrl + shift + down) – Midhat

3

Malicia?

En serio, es difícil explicar el estilo de formateo a veces. Es en gran medida una cuestión de gusto personal. Personalmente, creo que ambas formas son un poco desagradables a menos que estés seriamente restringido en términos de longitud de línea.

0

Sé cuando envuelvo y estoy en una declaración SQL o si intento asegurarme de que es el comienzo de la siguiente línea.

Si A y B y C

creo que deja claro la C sigue siendo parte del caso. El primer formato que muestre puede ser eso. Pero al igual que con la mayoría de las preguntas de estilo, la cuestión simple es que si el equipo decide un estilo, entonces debe respetarse.

1

Me parece una elección personal.

1

Al escanear el archivo rápidamente, está claro que cada línea que comienza con una coma es una continuación de la línea superior (en comparación con una línea que tiene más sangría que la anterior). Es una generalización del siguiente estilo:

std::cout << "some info " 
    << "some more info " << 4 
    + 5 << std::endl; 

(Tenga en cuenta, en este caso, rompiendo 4 + 5 es estúpida, pero si usted tiene una declaración matemáticas complejas puede ser necesario).

Lo uso mucho, especialmente cuando se trata de condicionales como declaraciones if, for y while. Porque también es común que los condicionales de una línea omitan los curlies.

std::vector<int> v = ...; 
std::vector<int> w = ...; 
for (std::vector<int>::iterator i = v.begin() 
     , std::vector<int>::iterator j = w.begin() 
     ; i != v.end() && j != w.end() 
     ; ++i, ++j) 
      std::cout << *i + *j << std::endl; 
1

No hay razón, sospecho que es solo una cuestión de preferencia personal.

Preferiría personalmente el segundo.

void function (int a, 
       int b, 
       int c 
      ) 
2

Otra ventaja es que en el primer ejemplo podría comentar las líneas B o C, y se mantendrá sintácticamente correcta. En el segundo ejemplo, si intentas comentar la línea C, tendrías un error de sintaxis.

No merece la pena hacerlo tan feo, si me preguntas.

1

El único beneficio que vería, es cuando agrega un parámetro, solo tiene que copiar y pegar la última línea, ahorrándole las pulsaciones de teclas adicionales de la posición de coma de edición y tal.

Lo mismo ocurre si está eliminando el último parámetro.

1

Cuando agrega otro campo al final, la línea individual que agrega contiene la nueva coma, produciendo una diferencia de adición de una sola línea, facilitando ligeramente ver qué ha cambiado al ver registros de cambios en el futuro .

1

Parece que la mayoría de las respuestas se centran en la posibilidad de comentar o agregar nuevos parámetros fácilmente. Pero parece que se obtiene el mismo efecto con poner la coma al final de la línea en lugar de comienzo:

function(
      int a, 
      int b, 
//   int c, 
      int d 
     ) 

Se podría decir que usted no puede hacer eso con el último parámetro, y que sería derecho, pero con la otra forma, no puede hacerlo al primer parámetro:

function (
//    int a 
      , int b 
      , int c 
      , int d 
     ) 

Así que la solución de compromiso es ser capaz de comentar el primer parámetro vs poder comentar el último parámetro + siendo capaz de agregar nuevos parámetros sin agregar una coma al último parámetro anterior.

+0

Supongo que, en muchos casos, habrá algunos parámetros que es muy poco probable que se modifiquen o eliminen (por ejemplo, cosas como un "ID de registro") y es más probable que esos parámetros se enumeren primero que el anterior. – supercat

Cuestiones relacionadas