¿Por qué algunos idiomas recomiendan usar espacios en lugar de pestañas? [cerrado]

10

Tal vez estoy solo en esto, pero pocas cosas me molestan, como las personas que usan sangría en lugar de pestañas. ¿Cómo es que escribir es SpaceSpaceSpaceSpacemás fácil e intuitivo que escribir Tab? Claro, el ancho de la pestaña es variable, pero es mucho más indicativo del espacio de sangría que los espacios. Lo mismo ocurre con el retroceso; retroceso una o cuatro veces?

¿Por qué los lenguajes como Python recomiendan usar espacios sobre pestañas?

Naftuli Kay
fuente
24
Puede configurar la mayoría de los editores para insertar espacios en lugar de pestañas cuando presiona tab. Si no puede configurar eso en su editor favorito, necesita un mejor editor.
Adam Lear
Una cosa, muchos editores se pueden configurar para insertar 4-8 espacios cuando se presiona 'tab', por lo que es solo presionar una tecla al igual que la pestaña.
Echo dice Reinstate Monica el
2
Todavía no responde mi pregunta. ¿Por qué espacios en lugar de pestañas? Claro, puede configurar su editor para insertar espacios en lugar de pestañas, pero presumiblemente también podría insertar pestañas con espacios. La pregunta es ¿por qué quieres hacer esto? ¿Qué beneficio posible se deriva?
Naftuli Kay
44
@Tk Los espacios son pestañas inequívocas que se pueden cambiar
Martin Beckett
3
@TKKocheran, porque las pestañas hacen cosas extrañas a su salida cuando las inserta accidentalmente en una cadena.
zzzzBov

Respuestas:

15

Consistencia, principalmente.

Además, de vez en cuando aparece algo que en realidad usa el espacio en blanco, como Python: Dime, ¿qué pasará si ejecuto el siguiente fragmento de código?

def foo():
    print "a"
    print "b"

Respuesta: Obtendrá un IndentationError, porque esas dos declaraciones de impresión no están sangradas en el mismo nivel y, por lo tanto, no forman parte del mismo bloque de código. (El primero usa una pestaña, el segundo todos los espacios)

Luego están los casos frustrantes cuando el editor de un desarrollador tiene pestañas configuradas en 8 espacios, y otro las configura en 4 y alguien usa 5 por alguna extraña razón ... Puede parecer perfectamente normal en una estación de trabajo, pero luego cuando se registra en SVN y alguien más se actualiza, verán un horrible, horrible desastre.

Esas son dos buenas razones para ser siempre coherentes, ya sean espacios o pestañas.

Pero los espacios permiten mucho más control sobre la sangría que las pestañas, y no requieren ninguna configuración especial en los editores para que funcione. (Aunque puede hacerse más fácil, por ejemplo, en vim, solo use set expandtabpara insertar espacios cada vez que presione la pestaña)

EDITAR: Y lo suficientemente divertido, el sitio parece haber normalizado mis pestañas en espacios para que el navegador pueda mostrarlo correctamente. Haga clic en "editar" para ver el original, con pestañas incluidas;)

Izkata
fuente
55
Sus problemas con las pestañas (especialmente, el horrible desorden SVN) solo se producen si usa la opción de pestañas a espacios en su editor. Si usted y su equipo acuerdan deshabilitar la opción de pestañas al espacio, entonces una pestaña siempre será una pestaña en cualquier vista: entonces es solo una opción de qué tan ancho desea que se muestre en su editor.
HorusKol
@HorusKol No, el horrible desastre se debe a que los espacios y las pestañas se mezclaron. Supongo que no lo hice lo suficientemente obvio (ver la frase solitaria después de la línea "horrible, horrible desastre"). Por lo tanto, los espacios se alinearon bien con las pestañas cuando están configurados para ser equivalentes a 4 espacios, pero luego, cuando alguien más lo ve (ya sea que las pestañas a los espacios estén o no configurados), se ensucian.
Izkata
44
Ya veo, bueno, debe establecer una directriz para su equipo, ya sea usar espacios consistentemente O pestañas ... de cualquier manera, pestañas a espacios es una mala idea en general;)
HorusKol
21
Es por eso que considero que la idea de los lenguajes con espacios en blanco es un defecto de diseño. Las cosas que no puedes ver nunca deberían romper tu código.
Paul Nathan
Solo para que conste, estoy de acuerdo con @PaulNathan
Izkata
11

Esta es una buena discusión sobre sangría y espacios en blanco en Python; del artículo:

[I] t puede ser una buena idea evitar las pestañas por completo, porque la semántica de las pestañas no está muy bien definida en el mundo de las computadoras, y se pueden mostrar de manera completamente diferente en diferentes tipos de sistemas y editores. Además, las pestañas a menudo se destruyen o se convierten incorrectamente durante las operaciones de copiar y pegar, o cuando se inserta un código fuente en una página web u otro tipo de código de marcado.

En cuanto a su argumento acerca de presionar la barra espaciadora o la tecla de retroceso 2 o más veces, ya que la mayoría de los editores de código fuente insertarán una cantidad configurable de espacios con solo presionar la tecla de tabulación, y de forma similar sin sangría, no hay más teclas presionadas cuando usando espacios para sangrar.

Para mí, prefiero espacios porque el código siempre se muestra con la misma cantidad de sangría, ya sea que lo esté viendo en un IDE less, o en el Bloc de notas; es decir, los espacios son más portátiles.

Mike Partridge
fuente
3
re: "si lo estoy viendo en un IDE, o menos, o en un Bloc de notas; es decir, los espacios son más portátiles" - este es el mejor argumento para los espacios que he escuchado. Yo también soy un tipo de "pestañas", pero ocasionalmente no me ha gustado ver el código con espaciado de pestañas representado de manera inesperada.
Aerik
2

En Python, la sangría controla el flujo del programa, por lo que es vital.
Si toma código formateado con pestañas y lo copia para que las pestañas cambien o se pierdan, la estructura del código se destruye. Los espacios son siempre espacios = mucho más seguros.

Si el desgaste de su barra espaciadora le preocupa, su editor probablemente se puede configurar para convertir pestañas en espacios automáticamente.

Martin Beckett
fuente
Estoy más preocupado con el tiempo perdido que pasa escribiendo espacio o retroceso cuatro veces versus una pulsación de tecla para hacer ambas cosas.
Naftuli Kay
Sí, pero Python es raro de esa manera. Nunca me he encontrado con nada más que se preocupe por los espacios.
Aerik
@TKKocheran Oh, ¿esa es tu verdadera preocupación? No sé cómo lo hicieron, pero vim en mi trabajo está configurado de modo que la tecla de retroceso se remonta a la última tabstop, a través de múltiples espacios, completamente transparente
Izkata
¿Podrías deshacerte .vimrcde mí? :)
Naftuli Kay
1
@TKKocheran Lo encontró: es justo set softtabstop=4, y TAB y BACKSPACE usarán 4 espacios como una pestaña. (Bueno, para cada tabulación, tratando el ancho como 4 espacios)
Izkata
2

Siempre se deben usar espacios, ya que las pestañas por sí solas no son lo suficientemente flexibles para muchos estilos, y la combinación de pestañas y espacios (casi) siempre produce un desorden absoluto.

Para un ejemplo de un estilo que generalmente necesita espacios, considere algo como:

call_some_function(parameter1,
                   parameter2,
                   parameter3,
                   parameter4,
                   parameter5,
                   parameter6,
                   parameter7);

A menos que esté dispuesto a cambiar el nombre de todas sus funciones para que sean un múltiplo exacto del tamaño de la pestaña (menos una para el paréntesis), las pestañas por sí solas simplemente no harán esto.

En cuanto a la combinación de pestañas y espacios, casi inmediatamente se encuentra con un problema grave: las pestañas no se expanden de la misma manera. Algunos programas tratan una pestaña como equivalente a un número específico de espacios. Otro software expandirá un módulo de pestañas un número específico de espacios, por ejemplo, un elemento después de una pestaña siempre comenzará en un número de columna que es un múltiplo de (digamos) 8.

Incluso si puede asegurarse de que los espacios no se mezclen con sus pestañas, todavía tiene un problema: las pestañas también funcionan mal con las fuentes de ancho variable. Este problema surge cuando (por ejemplo) desea alinear comentarios finales:

a.m = 9;   // this is the slope
a.i = 4;   // this is the intensity
a.x = 1;   // this is the x-intercept

Tal como están ahora, todos se alinean perfectamente. Visto con una fuente de ancho variable, sin embargo, las cosas se ponen feas. Con espacios, los comentarios pueden (a menudo lo harán) ligeramente desalineados. Con las pestañas, sin embargo, la desalineación a menudo se vuelve bastante radical:

a.m = 9;          // this is the slope
a.i = 4;  // this is the intensity
a.x = 1;          // this is the x-intercept

De repente, la pequeña diferencia de ancho entre la 'i' y la 'm' o 'x' en nuestra fuente de ancho variable se ha ampliado a una tabulación completa.

La conclusión es que casi cualquier cambio en la forma de ver el código con pestañas, sin importar cuán aparentemente trivial, puede y generalmente producirá un lío ilegible.

Para responder a sus otras preguntas: otras ya lo han señalado, pero no puedo imaginar a nadie en un editor de programación (o mucho más) que realmente use la barra espaciadora para insertar los espacios, por lo que su pregunta sobre: ​​"escribir spacespacespacespace" es irrelevante porque nadie lo hace de todos modos. Del mismo modo con el retroceso: es difícil imaginar un editor que requiera presionar BkSpccuatro veces para ir a una tabulación anterior, por lo que (nuevamente) la pregunta es irrelevante.

En pocas palabras: las pestañas están bien si usted (y solo usted) alguna vez mira su código, y solo lo hace con un solo editor que nunca reconfigura (¡en absoluto!) Sin embargo, esas condiciones son casi imposibles de exigir que solo haya una respuesta razonable: nunca use pestañas.

Jerry Coffin
fuente
1
Veo que dices "las fuentes proporcionales rompen los espacios y las pestañas pero rompen peor las pestañas, así que usa espacios" ¿Por qué no usar topes elásticos? nickgravgaard.com/elastictabstops
amara el
@sparkleshy: es una buena idea, pero no hace ninguna diferencia con el código real, y no lo hará hasta que todos (o al menos la gran mayoría de los editores reales) ya lo incluyan.
Jerry Coffin
... Lo sé: '(- bueno, un poco. Todavía puedes usar un editor respaldado por espacios (como debería ser la tecla de tabulación si estás usando espacios) pero finge que son tabulaciones elásticas; hace que administrar los espacios más fácil.
Amara
2
Si está programando en fuentes de ancho proporcional, bueno, tiene muchos más problemas que solo pestañas de las que preocuparse ...
Brian Knoblauch
1
@BrianKnoblauch: Como alguien que usa la fuente eurofurence, debo estar en desacuerdo. Lo único que me causa problemas son los espacios. También tiene que ver con mi estilo de sangría, que nunca diferirá en más de una pestaña entre líneas. Suponiendo que alguna vez obtengo pestañas elásticas, mi código se verá aún mejor.
Magus
2

El gran problema es la inconsistencia del ancho de la "pestaña", a veces se representan como cuatro espacios, a veces ocho. En muchos editores, puede configurarlos para que sean de 1 a 9 espacios.

Entonces, esto convierte un simple editor WYSWYG en Lo que ves es lo que alguien más podría obtener.

Es un problema particular para Python, pero también es un problema en cualquiera de los lenguajes de "llaves", ya que la sangría se usa para transmitir significado a los lectores humanos y las pestañas en mal estado hacen que el código sea difícil de leer.

James Anderson
fuente