¿Por qué el espacio en blanco al final es un gran problema? [cerrado]

116

El espacio en blanco final es un problema suficiente para los programadores ya que los editores como Emacs tienen funciones especiales que lo resaltan o lo eliminan automáticamente, y muchos estándares de codificación requieren que elimine todas las instancias. Sin embargo, no estoy completamente seguro de por qué. Puedo pensar en una razón práctica para evitar espacios en blanco innecesarios, y es que si las personas no tienen cuidado de evitarlo, entonces podrían cambiarlo entre confirmaciones, y luego se contaminan las diferencias con líneas aparentemente sin cambios, solo porque alguien eliminó o Agregó un espacio.

Esto ya parece una buena razón para evitarlo, pero quiero ver si hay algo más que eso. Entonces, ¿por qué el espacio en blanco final es tan importante?

EpsilonVector
fuente
30
El espacio en blanco al final es, de hecho, cometer ruido. No se me ocurre ninguna otra razón.
Yannis
17
Una buena herramienta diff debería ser capaz de ignorar los espacios en blanco finales (y también iniciales, si lo desea). Después de todo, Emacs puede hacerlo, ¿por qué no sus herramientas diff?
FrustratedWithFormsDesigner
44
Navegar hasta el final de la cadena con el botón 'Fin' podría ser complicado con muchos espacios en blanco al final.
Iarek Kovtunenko
11
Creo que estás haciendo la pregunta de manera incorrecta. Al revés es: «¿cuáles son las ventajas de arrastrar espacios en blanco? ». La respuesta se vuelve bastante obvia cuando se hace la pregunta correcta;)
deadalnix
77
Quizás deberías intentar programar en Whitespace . * 8 ')
Mark Booth

Respuestas:

76

Razones por las que es importante para mí:

  • Cuando presiono la tecla "Fin", espero que el cursor vaya al final de la línea (dependiendo del editor que esté usando y cómo esté configurado) y espero poder comenzar a escribir de inmediato. Si el cursor llega allí y tengo que eliminar 3 o 4 caracteres, es molesto. Especialmente si es inconsistente en todo el archivo (s).

  • Cuando tengo literales de cadena que abarcan varias líneas, los espacios en blanco finales pueden hacer que la cadena de salida se vea incorrecta cuando se usa.

Si bien no se trata de una programación estricta, el espacio en blanco puede alterar seriamente la entrada de datos, si hay un seguimiento / inicio en un archivo que se analizará y utilizará como entrada para otra cosa. Esto sucede más cuando un archivo de entrada limpio y generado se ensucia por alguien que lo edita en Excel o algo así y luego puede arrastrarse el espacio en blanco (y otros problemas de formato).

FrustratedWithFormsDesigner
fuente
8
El punto 1 es un problema con su editor, no con el espacio en blanco final.
Marjan Venema
33
@MarjanVenema: Sí, un editor podría diseñarse para ir al último espacio en blanco NO, pero nunca sabrías sobre el espacio en blanco final (a menos que se indique de otra manera, también probablemente me resultaría extraño que END no Ir al final de la línea, que es a lo que estoy acostumbrado). Lo cual sería un problema con los literales de cadena de varias líneas. Entonces, el editor tendría que saber que en un literal de cadena de varias líneas, END debe ir al último carácter, incluido el espacio en blanco. El editor que estoy usando no es tan inteligente.
FrustratedWithFormsDesigner
2
Agregaría que la selección con el mouse es difícil de hacer sin seleccionar espacios adicionales y eso podría importar si se trata de una pasta cortada. O que genera ruido cuando se comete (¡finalmente se confunde!) Por nada. No es gran cosa, pero sí muchas molestias. Da la sensación de que el desarrollador anterior era flojo y espera que te vayas en su desorden.
deadalnix
1
@deadalnix: por supuesto, es por eso que necesitas un buen editor con opciones para satisfacer las preferencias de la mayoría de las personas. Y por lo tanto, el punto 1 es un problema con el editor y no con el espacio en blanco final.
Marjan Venema
1
El punto 1 es precisamente por qué prefiero tener un estilo particular de espacios en blanco al final: las líneas en blanco se sangran con el código que separan. Esto permite que el nuevo código se inserte inmediatamente sin tener que sangrar.
Xiong Chiamiov
29

Realmente odio el espacio en blanco, pero la razón exacta es un poco vaga.

Supongo que el origen de ese sentimiento no está en la programación, sino en el campo de la publicación de escritorio. ¿Alguna vez alguien mecanografió un documento que necesitaba ser mecanografiado en una publicación? En todas las publicaciones modernas, especialmente cuando se usan columnas, es costumbre que las oraciones se sigan secuencialmente dentro de un párrafo, sin comenzar una nueva línea para cada oración. Bueno, cuando hay espacios en blanco al final, se necesita mucho más esfuerzo para hacerlo bien (muchas acciones de búsqueda y reemplazo que eliminan los espacios dobles, etc.).

Otras razones (en programación), no buenas razones, lo sé, pero molestan mi psique subconsciente de una manera tan intensa y agravante que me obligan a eliminarla:

  • Se necesita más espacio de almacenamiento del necesario
  • El analizador tendrá que omitir un carácter adicional sin razón alguna al compilar
  • Algunos editores pueden agregar una línea en blanco adicional cuando WordWrap está activado y el espacio final no se ajusta

¡Si si lo se! Lo sé, estas son razones basura. No soy perfeccionista, pero ... bueno, ¿tal vez lo soy?

La última razón por la que puedo pensar es el movimiento inconsistente del cursor. Se siente como si el cursor estuviera suspendido en el aire al final de una línea, cada paso a la derecha puede hacer que se caiga o se mueva más lejos hasta un punto desconocido, simplemente se siente inestable (como esos bloques invisibles o desaparecidos que Super Mario solía saltar sobre).

¿Probablemente me puedan diagnosticar con trailpacefobia?

Louis Somers
fuente
No es mi campo, pero me parece extraño ... ¿qué tipo de sistema de composición tipográfica se usa allí en la publicación de escritorio, que no ignora los espacios finales / múltiples por defecto ? Pensé que la forma en que LaTeX y la mayoría de los lenguajes de programación lo hacen es estándar en todas partes, excepto en la basura WYSIWYG de nivel de consumidor.
Leftaroundabout
Adobe InDesign (¿eso también se incluye en la basura WYSIWYG de nivel de consumidor?). Ignorará los espacios finales, sí, pero reemplazará todos los avances de línea con espacios en un párrafo y terminará con espacios dobles (que no se ignoran), luego se necesita un reemplazo adicional para eliminarlos.
Louis Somers
La "publicación de escritorio" no es algo que se hace con un "sistema de composición tipográfica".
rakslice
22

Muchas de estas respuestas casi tocan la razón por la que es malo para mí, pero básicamente: "rompe" a los editores de texto. Mi experiencia es con vim.

Vim está diseñado para que las acciones comunes se asignen a letras de manera tan limpia que ni siquiera tenga que pensar en qué letra o combinación de teclas presionar. Varias teclas de acceso rápido permiten que el cursor salte alrededor del texto tan rápido que solo se necesitan un par de teclas para llegar al lugar que desee. Incluso cosas como doblar bloques de código es rápido, ya que puede presionar FIN o $ para saltar al final de la línea, donde el cursor debe superponerse {o} o (o) o algo así; no es necesario interrumpir su flujo de pensamiento para tener una idea en la pantalla.

Pero luego aparece un espacio en blanco al final, y los movimientos del cursor ya no son predecibles. Su proceso de escritura está siendo interrumpido porque algo que no puede ver está afectando a dónde va el cursor, por lo que debe romper su tren de pensamiento para enviarlo a donde debería estar.

¿Alguna vez has notado lo molestas que están las personas cuando están realmente concentradas en una tarea y alguien las interrumpe? Sí, encontrar espacios en blanco al final cuando menos se espera es exactamente así.

Como nota al margen, también he notado que las personas que no se preocupan por los espacios en blanco finales son las que usan el mouse para la navegación, y tienden a ser mecanógrafos más lentos debido a eso ...

Izkata
fuente
2
Como nota al margen, la velocidad de escritura no tiene nada que ver con si usas el mouse para navegar o no. Alguna navegación es perfectamente adecuada para un mouse. ; p
Steven Jeuris el
2
Si usa vim, puede eliminar rápidamente todos los espacios en blanco finales:%s/ *$//
Giorgio
1
@Giorgio Lo sé, pero no puedo hacerlo en cualquier momento porque cuenta como un cambio en el control de versión
Izkata
@izkata: Cierto. Vuelvo a formatear los archivos que tengo que cambiar antes de registrarlos, pero esta es una batalla perdida si otros desarrolladores siguen registrando archivos con espacios en blanco al final.
Giorgio
17

Sorprendentemente, falta la respuesta más obvia: el espacio en blanco al final puede y producirá errores difíciles de encontrar.

La situación más obvia son las cadenas multilínea. Python, JavaScript y Bash son algunos ejemplos de los lenguajes que pueden verse afectados por esto:

print("Hello\·
····World")

produce:

  File "demo.py", line 1
    print("Hello\
                 ^
SyntaxError: EOL while scanning string literal

que de alguna manera es críptico y difícil de resolver si el editor no está configurado para mostrar caracteres de espacio en blanco.

Si bien el resaltado de sintaxis puede ayudar a evitar tales casos, es aún más fácil no tener el problema en primer lugar al no dejar espacios en blanco al final de las líneas. Esta es la razón por la cual algunos correctores de estilo emitirán una advertencia al encontrar espacios en blanco al final, y algunos editores los recortarán automáticamente.

ingrese la descripción de la imagen aquí

Ilustración: el resaltado de sintaxis puede ayudar a evitar espacios en blanco al final en situaciones en las que puede provocar errores, pero no confíe solo en él.

Otro contexto, mencionado brevemente en una respuesta anterior , son los datos almacenados en archivos.

Por ejemplo, los archivos CSV que contienen espacios en blanco finales pueden causar inconsistencia de datos que también es muy difícil de detectar: ​​los analizadores que cumplen con los estándares recortarán los espacios en blanco (el estándar indica que los espacios en blanco iniciales o finales son irrelevantes, a menos que estén delimitados con comillas dobles), pero algunos analizadores pueden comportarse mal y mantener el espacio en blanco como parte de un valor.

Otros formatos personalizados pueden considerar específicamente que el espacio en blanco es la parte del valor, lo que lleva a situaciones consistentes pero aún difíciles de depurar.

Arseni Mourzenko
fuente
14

Recientemente pasé un día buscando un error que resultó ser un espacio en blanco final inesperado en los datos.

ddyer
fuente
13
Creo que es un error; el procesamiento de código de entrada generada por humanos debe descartar los espacios en blanco finales, y a menudo también se debe descartar el espacio en blanco inicial.
Kevin Cline
@kevincline - Debería ser al menos. Si no está visible en la pantalla o en la impresión, no quiero pensar en ello.
Torre
66
Debido a que pasó un día buscando un error, los espacios en blanco finales son un gran problema. Edite su respuesta para que sea más general que eso. Agregue algunos antecedentes, argumentos, ... Personalmente, nunca tuve problemas finales de espacios en blanco, pero no uso eso como una conclusión de que tampoco son un problema.
Steven Jeuris el
2
@Steven Trailing whitespace causó un error que era difícil de rastrear. Parece una buena respuesta para mí. Puede imaginar cómo podría romperse algún código de análisis de datos en esa situación.
Will Sheppard
Eliminé los espacios en blanco al final de los datos y ahora falla una prueba. Eres responsable de eso. ¿Cuál es tu nombre? ¿A dónde enviaré la factura?
Thomas Weller
8

Cuando selecciono el código fuente del programa para copiarlo y pegarlo (o eliminarlo), me resulta un poco molesto ver todo el espacio en blanco extra irregular al final de las líneas: ya que tengo que leer el código mientras lo selecciono , el espacio en blanco final es un ruido innecesario. Ejemplo (los puntos representan el espacio en blanco):

if (fp)........
{....
    fclose(fp);.
}
else
{.....
    prinft("File is NULL\n");
}..

Este ejemplo es artificial, pero he visto mucho código que se ve así.

Giorgio
fuente
7

¿Además del problema obvio de que rompe el análisis en ciertos casos? Como ha señalado otro afiche, puede causar errores sutiles y difíciles de rastrear. El espacio en blanco no siempre es insignificante. En algunos casos, los espacios en blanco finales pueden cambiar significativamente el significado de una línea de código o datos.

En la mayoría de los casos, hay espacios en blanco para formatear el código para lectores humanos. Los espacios en blanco finales pueden indicar varias cosas, incluyendo:

  • Una declaración incompleta;
  • Un comentario faltante;
  • Una edición equivocada; o
  • Edición descuidada.

Dos de estos pueden resultar en un funcionamiento incorrecto, y otro puede dificultar la comprensión del código.

BillThor
fuente
4

Hay lenguajes de programación que son sensibles al espacio en blanco de la línea final. Por ejemplo, un script TCL generará un error si hay un espacio en blanco al final de una línea.


fuente