¿Por qué PEP-8 especifica una longitud máxima de línea de 79 caracteres? [cerrado]


235

¿Por qué en este milenio Python PEP-8 debería especificar una longitud máxima de línea de 79 caracteres?

Casi todos los editores de código bajo el sol pueden manejar líneas más largas. Lo que se debe hacer con la envoltura debe ser la elección del consumidor de contenido, no la responsabilidad del creador del contenido.

¿Hay alguna (legítima) buena razón para adherirse a 79 caracteres en esta época?


73
La respuesta a su pregunta está en PEP-8.
cdleary

29
Las longitudes de línea más cortas mejoran la productividad al aumentar su KLOC. : p
Alex

26
El límite de 79 caracteres está completamente desactualizado. Cualquier base de código modestamente compleja muestra cómo hace que el código sea mucho más incómodo de leer. Ej: github.com/openstack/nova/blob/master/nova/network/manager.py
Jonathan

66
@ Jonathan: me parece bien ...
nperson325681

99
¿Ustedes no usan herramientas de diferencia de lado a lado?
endolito el

Respuestas:


129

Gran parte del valor de PEP-8 es evitar que las personas discutan sobre las reglas de formato intrascendentes y seguir escribiendo un código bueno y consistentemente formateado. Claro, nadie realmente piensa que 79 es óptimo, pero no hay una ganancia obvia en cambiarlo a 99 o 119 o cualquiera que sea la longitud de línea preferida. Creo que las opciones son estas: seguir la regla y encontrar una causa que valga la pena luchar, o proporcionar algunos datos que demuestren cómo la legibilidad y la productividad varían con la longitud de la línea. Esto último sería extremadamente interesante y creo que tendría una buena oportunidad de cambiar las mentes de las personas.


28
La mayoría de los estudios de lectura se realizan en pulgadas y no en caracteres por línea. La regla de 66 caracteres se basa en estudios realizados para leer periódicos. Estudios recientes han demostrado que cuando se leen artículos en línea, la velocidad de lectura aumenta hasta aproximadamente 120 caracteres por línea (10 pulgadas con tamaño de letra 12) sin pérdida de comprensión.
Pace

77
En realidad, todos los que leen ese tema piensan que 79 caracteres son óptimos. ¡Es por eso que se agregó a PEP8! Esta respuesta es realmente incorrecta. Este es el correcto
erikbwork

66
Pensé que la pregunta es por qué 79 es mejor que 80 o 78
n611x007

157
there's no obvious gain in changing it to 99 or 119 or whatever your preferred line length is Esto está muy mal en muchos sentidos. Envuelva una línea con 40 caracteres y dígame cuán legible es. Obviamente, menos envoltura = más legibilidad siempre que tenga espacio en la pantalla, que en 2015 sí. El envoltorio impacta la legibilidad. La legibilidad afecta la mantenibilidad. La mantenibilidad impacta la calidad. Y la calidad se ve afectada si está terminando en 80 caracteres. Punto final.
Jonathan

66
Discutir acerca de la legibilidad con cualquier cosa que no sea código es inútil ya que esos estudios suponen que se ejecuta texto. El código se ve completamente diferente con diferente longitud de línea (carácter) en cada línea. E incluso si escribe hasta el final de la línea, la sangría cambia la cantidad de caracteres por línea.
Corvince

111

Mantener su código legible por humanos, no solo legible por máquina. Muchos dispositivos solo pueden mostrar 80 caracteres a la vez. También facilita que las personas con pantallas más grandes realicen múltiples tareas al poder configurar múltiples ventanas para estar una al lado de la otra.

La legibilidad también es una de las razones de la sangría de línea forzada.


58
Si, concedido. ¿Pero por qué 79? ¿Por qué no 100 o 120? Mantener las cosas legibles funciona en ambos sentidos. También es difícil asimilar demasiada lectura de código de arriba a abajo.
pcorcoran

17
Es cierto que muchos dispositivos solo pueden mostrar 80 caracteres. ¿Cuántos de ellos no pueden realizar envolturas suaves?
Jim

39
Además, se prefiere no tener ajuste de código. Desde la perspectiva de la experiencia del usuario, es inaceptable para la mayoría.
Justin Bozonier

8
Hay algunos sistemas operativos como MVS que no pueden manejar líneas de más de 72 caracteres. PEP-8 no ayudará aquí. Establecer un límite arbitrario de 79 caracteres no tiene sentido ya que la forma en que los caracteres por línea son buenos depende del editor, el monitor, las preferencias personales del usuario, etc.
codymanix

96
79 caracteres también hacen que los programadores usen nombres de funciones y variables crípticas más cortas para que todo encaje Esto es malo para la legibilidad.
Gert Steyn

46

Soy un programador que tiene que lidiar con una gran cantidad de código a diario. Código abierto y lo que se ha desarrollado en casa.

Como programador, me resulta útil tener muchos archivos fuente abiertos a la vez, y a menudo organizo mi escritorio en mi monitor (panorámico) para que dos archivos fuente estén uno al lado del otro. Podría estar programando en ambos, o simplemente leyendo uno y programando en el otro.

Me parece insatisfactorio y frustrante cuando uno de esos archivos de origen tiene> 120 caracteres de ancho, porque significa que no puedo colocar cómodamente una línea de código en una línea de pantalla. Altera el formato al ajuste de línea.

Digo '120' porque ese es el nivel al que me molestaría que el código sea más ancho que. Después de tantos caracteres, debe dividirse entre líneas para facilitar la lectura, y mucho menos para los estándares de codificación.

Escribo código con 80 columnas en mente. Esto es solo para que cuando me filtre sobre ese límite, no sea tan malo.


11
"Escribo código con 80 columnas en mente. Esto es solo para que cuando me filtre sobre ese límite, no sea tan malo". Lo mismo para mi.
KobeJohn

44
10 años después: ¿no depende eso de cómo configure el ajuste de línea? El ajuste de línea puede ser tan inteligente o estúpido como lo desee. Si es incómodo de leer, es solo una falla de su editor.
David Mulder

2
Codifico 120 caracteres pero ocasionalmente más tiempo cuando se adapta a la legibilidad. Formatos negros a 120 si se lo indica. PEP-8 también dice "está bien aumentar el límite de longitud de línea hasta 99 caracteres", pero la gente parece suprimir esa información la mayor parte del tiempo. Casi nadie usa terminales de 80 de ancho. Los mensajes de registro nunca tienen 80 de ancho.
NeilG

37

Creo que aquellos que estudian la tipografía dirían que se supone que 66 caracteres por línea son el ancho más legible para la longitud. Aun así, si necesita depurar una máquina de forma remota durante una sesión ssh, la mayoría de las terminales tienen un valor predeterminado de 80 caracteres, 79 simplemente encaja, tratar de trabajar con algo más amplio se convierte en un verdadero dolor en tal caso. También te sorprendería la cantidad de desarrolladores que usan vim + screen como entorno diario.


<flame> Emacs FTW! </flame> +1, sin embargo. Creo que el límite de 79 proviene de los primeros días de UNIX (y posiblemente MULTICS) que tenía terminales de 80x25 caracteres.
Joe D

10
Mis entornos ssh + screen + vim no tienen problemas para mostrar líneas largas.
chrishiestand

54
"Se supone que 66 caracteres por línea son el ancho más legible para la longitud" Supongo que deberíamos escribir el código en 2 o 3 columnas, ya que así es como se presentan los periódicos.
Mark E. Haase

23
@mehaase: su comentario sarcástico está bastante cerca de la verdad: los editores decentes pueden hacer paneles divididos y mostrar diferentes elementos uno al lado del otro (de archivos iguales o diferentes). Casualmente, esto generalmente solo es factible cuando el código tiene un estándar de longitud de línea ...
nperson325681

2
@mehaase: Suena increíble, en realidad. No estoy bromeando.
Teekin

19

La impresión de una fuente monoespaciada en tamaños predeterminados es (en papel A4) 80 columnas por 66 líneas.


11
Acepto este estándar; Es valido. ¿Pero quién imprime código más? Además, ¿quién imprime el código de un entorno que es intolerante con la escala u otras opciones de formato? ¿Cuándo fue la última vez que alguien que conoces quedó perplejo por su incapacidad para representar una línea de 100 caracteres?
pcorcoran

3
¿Por qué la gente imprime el código en 2012? Esto me recuerda a ir a una conferencia de tecnología y recibir una bolsa y una carpeta impresa llena de presentaciones. Son las personas del siglo XXI: envíeme un correo electrónico con las diapositivas o, de lo contrario, la bolsa y la carpeta irán directamente a un vertedero.
Mark E. Haase

2
Entonces, ¿por qué 80-1 es mejor que 80-0 o 80-2?
n611x007

11
"en tamaños predeterminados" ¿Dices? Cuéntame más sobre estos tamaños predeterminados universalmente aceptados.
Bruno Bronosky

15
Sí, prioricemos la forma en que se ve el código en el papel impreso por encima de todo.
Jonathan

8

He aquí por qué me gusta el carácter de 80 caracteres: en el trabajo uso Vim y trabajo en dos archivos a la vez en un monitor que funciona a 1680x1040 (creo que nunca lo recuerdo). Si las líneas son más largas, tengo problemas para leer los archivos, incluso cuando uso el ajuste de línea. No hace falta decir que odio tratar con el código de otras personas ya que les encantan las largas colas.


¿no usas vim para javascript / html también?
plata Elad

2
@eladsilver No puedo resolver si eso es una broma? :-D
Steven Church

lo siento, no es muy profundo con vim, obviamente si trabajas en la web lo usas también para html / js y esos tipos nunca vienen con un límite de 80 caracteres ya que los desarrolladores front-end no saben acerca de pep8, por lo que hacer que Python limite 80 caracteres no resolverá su problema si usa más que solo python. Entonces, lo que pregunto es ¿cómo maneja otros lenguajes de codificación?
elad silver

Trabajo en Vim con 120 líneas de caracteres. Yo uso: diffthis con división horizontal. Si solo puede caber 160 caracteres en 1680 píxeles, debe tener un tamaño de fuente grande.
NeilG

4

Dado que el espacio en blanco tiene un significado semántico en Python, algunos métodos de ajuste de palabras podrían producir resultados incorrectos o ambiguos, por lo que debe haber algún límite para evitar esas situaciones. Una longitud de línea de 80 caracteres ha sido estándar desde que usamos teletipos, por lo que 79 caracteres parece una opción bastante segura.


44
Hay dos tipos diferentes de ajuste de palabras. Hay un ajuste rígido, donde las líneas se dividen con nuevas líneas, y hay un ajuste suave, donde solo se muestran con saltos, pero permanecen físicamente en una sola línea. No veo ningún problema con esto último.
Jim

44
La mayoría de los editores de Python no hacen un ajuste suave de palabras porque produce un código ambiguo difícil de leer en un lenguaje donde el espacio en blanco y la sangría son importantes.
Chris Upchurch

44
No produce código ambiguo o difícil de leer siempre que el ajuste se identifique visualmente de alguna manera. Kate hace esto y funciona bien. Si un editor no maneja esto, entonces esa es una razón para presentar un error contra el editor, no una razón para imponer un estilo de codificación que lo evite.
Jim

55
Incluso si se indica visualmente, aún hace que el código sea mucho más difícil de leer, por lo que los editores de Python generalmente no lo admiten.
Chris Upchurch

¿Realmente lo has probado durante un período prolongado de tiempo? Yo tengo. No hace que el código sea más difícil de leer en mi experiencia. ¿Puede respaldar la afirmación de que es por eso que los editores de Python no incluyen la función? Nunca he escuchado esa afirmación antes.
Jim

1

Estoy de acuerdo con Justin Para elaborar, las líneas de código demasiado largas son más difíciles de leer para los humanos y algunas personas pueden tener anchos de consola que solo admiten 80 caracteres por línea.

La recomendación de estilo está ahí para garantizar que el código que escriba pueda ser leído por tantas personas como sea posible en la mayor cantidad de plataformas posible y de la manera más cómoda posible.


10
Este es un argumento vago. No siempre es el caso que 80 líneas dañan la legibilidad. Un vistazo rápido a cualquier base de código de Python modestamente compleja que se ajusta a 80 líneas en realidad demuestra lo contrario: que el ajuste de llamadas de función de una sola línea a varias líneas hace que sea más difícil seguir WTF.
Jonathan

0

porque si lo empuja más allá de la columna 80 significa que está escribiendo una línea de código muy larga y compleja que hace demasiado (y, por lo tanto, debe refactorizar), o que sangra demasiado (y, por lo tanto, debe refactorizar).


90
-1, no creo que puedas decir categóricamente que cualquier línea que pase el límite de 80 caracteres requiere un refactorizador. Los métodos de clase ya están sangrados dos veces, agregue otra sangría para un "si", etc. y una comprensión simple de la lista, y es bastante fácil cruzar el límite de 80 caracteres.

42
Sin mencionar que si nombra los símbolos de tal manera que sean legibles para los humanos, por ejemplo, "users_directed_graph" en lugar de "usr_dir_gph", incluso una expresión simple consumirá bastantes caracteres por línea.
Mark E. Haase

8
Siempre he descubierto en Python que si supero los 80 caracteres, es aconsejable detenerse y pensar por qué. Por lo general, la mala decisión de diseño tiene la culpa.
Mike Vella

3
Esta tambien ha sido mi experiencia. También aborda nombres de variables más largos, como señala @mehaase, pero creo que esto es un beneficio. Las combinaciones disponibles de tres palabras consecutivas (en el caso de "users_directed_graph") eclipsan la cantidad de componentes que caben razonablemente en un solo espacio de nombres. Considero que el código más antiguo que he escrito donde hay muchos nombres de variables largos similares en el mismo espacio de nombres es más difícil de leer y, en general, mejor refactorizar.
TimClifford

44
En un lenguaje que requiere sangrías para cada cambio de alcance, decir que 80 líneas de caracteres equivalen a complejidad es un argumento demasiado simplista. A veces, 80 caracteres es justo lo que se necesita para invocar una función. Los IDE / editores modernos para otros idiomas son lo suficientemente inteligentes como para reconocer esto y pueden discernir cuándo ajustar en lugar de imponer restricciones generales sobre todo lo que perjudica la legibilidad en general.
Jonathan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.