2009-02-19 14 views
17

Cada estándar de codificación que he visto tiene un límite recomendado o absoluto para el número de caracteres en una línea. Hay varias formas de trabajar dentro de esta limitación, pero no he visto ninguna orientación específica al respecto.Estándares de codificación y longitud de línea

Obviamente, si es posible, no escriba líneas excesivamente largas.

¿Pero y si eso no es práctico? ¿Cómo deben manejarse las líneas largas?

Aquí hay un par de ejemplos

if ($Stmt = $Mysqli->prepare("SELECT color, pattern, size, 
           manufacturer, mfgSku, storeLocation, 
           aisle, status 
           FROM tblItems WHERE ourSku = ?")) { 

o

$flavors = array ('chocolate', 'strawberry', 'vanilla', 'cookie dough', 
        'chocolate chip', 'mint chocolate chip', 'rocky road', 
        'peach', 'fudge brownie', 'coffee', 'mocha chip'); 

o

$Stmt->bind_result($this->_firstName, 
        $this->_lastName, 
        $this->_BillToAddress->address1, 
        $this->_BillToAddress->address2, 
        $this->_BillToAddress->city, 
        $this->_BillToAddress->state, 
        $this->_BillToAddress->zip, 
        $this->_BillToAddress->country, 
        $this->_email, 
        $this->_status, 
        $this->_primaryPhone, 
        $this->_mobilePhone); 

En cada uno de estos ejemplos, la sangría de código largo es diferente. ¿Hay una manera mejor o más "estándar" de hacer esto? Si las líneas adicionales siempre se sangran de la misma manera. ¿O esto está bien?

+0

Tengo sentimientos encontrados sobre este. Inicialmente pensé víctima puesto que la longitud y la línea alrededor de los estándares que ha sido discutido ad nauseum. Pensándolo bien, creo que esto puede ser lo suficientemente distinto como para mantenerse por sí mismo. – EBGreen

+0

Habiendo dicho eso, sugeriría leer las otras preguntas donde la longitud de la línea y cómo manejarla ha sido golpeada hasta la muerte. /stackoverflow.com/questions/131468/what-is-a-sensible-maximum-number-of-characters-per-line-of-code-closed – EBGreen

+0

@EBGreen - Gracias – PartialOrder

Respuesta

10

Hay un patrón que puede ver en cada ejemplo: están sangrados al primer parámetro de la función. Este es un buen estándar a seguir a medida que transpone los datos de horizontal a vertical y las columnas permiten una fácil lectura.

Para otros problemas de longitud de línea, como cálculos prolongados, el método preferido es desglosarlos. El cálculo de la fecha juliana o Pascua se realiza en varios pasos en lugar de un cálculo largo.

-Adam

0

No estoy al tanto de cualquier punto de vista, ya que sería difícil de decir. Para aquellos de nosotros en monitores más grandes, podemos ver más códigos horizontales que otros en monitores más pequeños. Generalmente intento construir cadenas largas secuencialmente a través de. = (PHP) cuando es necesario, y como tu código demostró, dividí las matrices largas arbitrariamente en nuevas líneas, dependiendo de la cantidad de caracteres que exista en esa línea en particular.

3

No creo que se deba tener intencionalmente líneas largas pero, a riesgo de ofender a muchos, sugiero que la longitud de la línea realmente ya no es tan importante.

Vim y emacs manejan bastante bien las líneas largas, y están instaladas en casi todas las cajas Unix. En Windows, casi siempre estará dentro de un editor de texto GUI. Creo que tu estilo $Stmt->bind_result es el más fácil de leer, pero si solo tienes que cargar una gran cantidad de información estática en una declaración, no tengo ningún problema con una línea de 1000 caracteres.

+0

y si el largo la línea REALMENTE te molesta, siempre puedes activar el ajuste de línea ... con los números de línea mostrados por línea, realmente no es tan malo. +1 – rmeador

6

El contexto dicta cuál elegir. En definitiva, estás escribiendo un código para que lo lea un ser humano. Si sangrar un bloque de código de manera diferente facilitaría la lectura, hágalo.

4

Número de puerta 3. Si no puede hacerlo en una línea, hágalo en una línea por artículo, cualquier otra cosa ofusca los artículos después de la primera en la línea y es horrible de leer. La sangría constante también importa.

Fwiw, creo que esto es viejo en una época en que la mayoría de los programadores deberían tener monitores duales a alta resolución. El primer ejemplo parece que podría ser una línea bastante feliz.

+0

Además de la cuestión de los estándares, la alta resolución no cambia la naturaleza de la lectura. Cuando las líneas se vuelven demasiado largas, son difíciles de leer. Puedo incluir más del doble de lo que me siento cómodo leyendo en el ancho de mi pantalla. Usar el ancho completo solo me haría bajar la velocidad. – PartialOrder

1

Esto es bastante subjetivo realmente, al igual que la posición de los corchetes, y otros estilos de codificación.Lo principal no es tanto qué estilo elijas, sino que eliges un estilo y te apegas a él durante todo el proyecto.

Para mí, personalmente, que viene de un fondo de Python, que utiliza una línea de longitud de 79 y un estilo

$flavors = array ('chocolate', 'strawberry', 'vanilla', 'cookie dough', 
        'chocolate chip', 'mint chocolate chip', 'rocky road', 
        'peach', 'fudge brownie', 'coffee', 'mocha chip'); 

.

Pero como digo, en mi opinión, es más importante tener un estilo, en lugar de preocuparse por cuál.

1

En prosa, se ha demostrado que las líneas de más de 80 o más son más difíciles de leer. (Consulte la página 13 de la clase LaTeX Memoria documentation.) código completo (sección 18.5, página 425 de mi edición) del también hace referencia al límite de 80 caracteres con esta condición:

Con pantallas más grandes, tipos de letra estrechas, láser impresoras y modo horizontal, los argumentos para el límite de 80 caracteres no son tan convincentes como solían hacerlo conmigo. Una sola línea de 90 caracteres de largo suele ser más legible que una que se ha dividido en dos solo para evitar el desbordamiento de la columna. Con la tecnología moderna, probablemente sea correcto exceder 80 columnas ocasionalmente.

Me sangría al SQL en el primer ejemplo de forma separada del resto del código:

if ($Stmt = $Mysqli->prepare(
      "SELECT color, pattern, size, 
        manufacturer, mfgSku, storeLocation, 
        aisle, status 
      FROM tblItems 
      WHERE ourSku = ?")) { 

El segundo ejemplo podría ser mejor si estuviera cargada en un archivo de configuración o de mesa.

La tercera está muy bien, pero se puede apretar un poco con:

$Stmt->bind_result( 
    $this->_firstName, 
    $this->_lastName, 
    $this->_BillToAddress->address1, 
    $this->_BillToAddress->address2, 
    $this->_BillToAddress->city, 
    $this->_BillToAddress->state, 
    $this->_BillToAddress->zip, 
    $this->_BillToAddress->country, 
    $this->_email, 
    $this->_status, 
    $this->_primaryPhone, 
    $this->_mobilePhone 
); 
+0

'En prosa, se ha demostrado que las líneas de más de 80 o más son más difíciles de leer. ¿Citación? ¿Mostrado por quién? – Benubird

+0

@Benubird: Actualicé la respuesta con mi fuente principal. He visto que esta investigación hace referencia a otros lugares (y lee los artículos que describen la investigación), pero no recuerdo dónde se pueden encontrar en la parte superior de mi cabeza. –

0

yo no la opción 3 demasiado (1 elemento por línea) mente. Además, personalmente, siempre utilizo el engastado de palabras, así que tener código en una línea no me molesta en absoluto. Sin embargo, en su segundo ejemplo, con el envío de la palabra, eso podría parecer un desastre para los programadores que usan el envío de palabras. Quizás soy de un grupo más pequeño al que no le importan las colas largas.

0

La mejor práctica se deriva típicamente de los propósitos detrás de la línea de restricción de longitud en sí:

  • Aumentar la interoperabilidad (entre programadores, software de edición, etc.)
  • para aumentar la legibilidad y comprensión
  • Para aumentar el disfrute y la velocidad de desarrollo
  • para aumentar los ingresos y las ganancias

Por lo tanto, sus elecciones, como alinear todos los parámetros stmt, son buenas si contribuyen tanto a su propia comprensión futura como a la de los demás integrantes de su equipo.

Esperanza esto ayuda;) -M

11

Mi preferencia personal es la siguiente;

 
$Stmt->bind_result(
    $this->_firstName, 
    $this->_lastName, 
    $this->_BillToAddress->address1, 
    $this->_BillToAddress->address2, 
    $this->_BillToAddress->city, 
    $this->_BillToAddress->state, 
    $this->_BillToAddress->zip, 
    $this->_BillToAddress->country, 
    $this->_email, 
    $this->_status, 
    $this->_primaryPhone, 
    $this->_mobilePhone 
); 

De esta manera, el corchete de cierre y el punto y coma están en la misma sangría que la llamada de apertura. Sin embargo, no todos los idiomas admiten tener parámetros en otra línea para la llamada al método ...

+1

+1 porque prefiero este enfoque también –

+0

Esto se ve limpio y también cumple con el estándar PSR-2. –

1

Si está envolviendo más de dos elementos, prefiero una nueva línea para cada elemento, como en su tercer ejemplo. Es más fácil para las herramientas de control de origen automatizadas fusionar ediciones de otras personas si solo hay un elemento por línea.

5

Un estilo de sangría inusual en el que me encontraba facilitándome cuando hacía mucho trabajo SQL;

INSERT INTO someTable 
(
    id, 
    name, 
    age, 
    address1, 
    address2, 
) 
VALUES 
(
    2, 
    'Bob' 
    25, 
    '12 Fake Street', 
    'The Moon' 
) 

En realidad, me resulta mucho más fácil de leer que cualquier otro diseño para largas listas de parámetros.

+0

Lo he hecho aunque realmente no soluciona la horrible sintaxis de inserción de SQL. ¿Por qué no podemos INSERTAR EN alguna tabla (id = 1, foo = 3, bar = 'oro')? –

+0

Yo hago esto también. * Pero * También encuentro que este estilo es complicado cuando se usa copiar y pegar. –

+0

Nick: MySQL al menos admite sintaxis como INSERT INTO table SET foo = "foo", bar = "bar", etc. –

1

Siga el estándar utilizado por el código circundante. No crear su propio "estándar' no importa cuánto 'mejor'.

Cuestiones relacionadas