¿Los programadores de Python encuentran inconveniente el problema del espacio en blanco? [cerrado]

11

Muchos programadores, al encontrarse con Python por primera vez, se sienten inmediatamente desanimados por la importancia del espacio en blanco. He escuchado una variedad de razones por las cuales esto es inconveniente, pero nunca he escuchado una queja de un programador de Python.

Por supuesto, no he conocido a muchos programadores de Python, ya que he pasado mi carrera en el mundo de Java.

Entonces, mi pregunta es para aquellos de ustedes que han participado en un gran proyecto de Python (más de 3 meses, siendo Python el idioma principal utilizado): ¿Le pareció que el problema del espacio en blanco era inconveniente y continuamente molesto? ¿O no fue un problema una vez que te metiste en el flujo?

No estoy haciendo la pregunta porque estoy a favor o en contra de Python, o a favor o en contra de su uso de espacios en blanco. Me gusta Python, pero nunca lo he usado para nada grande.

No proporcione especulaciones si no tiene experiencia en Python.

Eric Wilson
fuente
2
¿Estarían usando el lenguaje si lo hicieran? Yo no lo haría Los requisitos de sintaxis molestos / distractores son una de las cosas que podrían hacerme elegir un idioma diferente para un proyecto (suponiendo, por supuesto, que puedo elegir).
¿desde cuándo es un problema el espacio en blanco? :-)
Kugel
22
Nos resulta incómodo que todos los demás sigan hablando de ello. Nunca pensamos en eso.
Winston Ewert
La cuestión del espacio en blanco no es diferente a hace años: OCCAM2 tenía un espacio en blanco significativo. No fue gran cosa.
rápidamente_abr
44
La única vez que lo he encontrado molesto es cuando copio y pego código de Internet que se escribió usando espacios en lugar de pestañas (o viceversa), causando errores de sintaxis literalmente invisibles
Cameron

Respuestas:

14

Solo hay un caso en el que encuentro que el espacio en blanco es molesto, y es cuando se modifica el código existente para que un bloque de código tenga más o menos sangría que antes (por ejemplo, agregar o eliminar un if:antes del código). Al escribir en un lenguaje como C, simplemente agrega el ify un par de llaves, y (en Emacs, o me imagino algún buen editor) presione Tab para permitir que el editor corrija automáticamente la sangría. En Python, debes hacerlo tú mismo. Por supuesto, hay atajos de editor para hacerlo usted mismo, por lo que no es tan malo, pero la pérdida de redundancia impone una ligera carga adicional al programador.

En general, es una victoria, aunque solo sea para evitar que la mitad de mi pantalla se llene de líneas como las siguientes:

         }
      }
   }
}
dfan
fuente
1
En cualquier editor razonable que hable Python, hay una manera muy fácil de reindentar el bloque de código. En Wing IDE, solo selecciono el bloque y presiono Tab (o Shift-Tab para disminuir el nivel de sangría).
Adam Crossland
1
Sí, en Emacs selecciono el bloque y presiono C-c >o C-c <. Sin embargo, todavía tienes que hacerlo tú mismo. Para decirlo de otra manera, dado que los espacios en blanco y la lógica de código no son redundantes, no puede simplemente seleccionar un bloque gigante y llamar M-x indent-region(o la versión de su editor) para sangrarlo "correctamente".
dfan
66
@ Adam, un buen editor hace que sea más fácil cambiar tu nivel de sangría. Pero en un lenguaje de llaves, puede pegar un nuevo código y presionar su tecla favorita para reiniciar el archivo. Tada! La sangría es correcta. En python, debe pegar, seleccionar, sangrar / sangrar. No es mucho, pero aquí hay una pequeña victoria para los aparatos ortopédicos.
Winston Ewert
@ Winston - debe ser tu editor. Si el código que pega está en sí mismo correctamente indentet, entonces si sale unos pocos niveles demasiado a la derecha / izquierda, solo es cuestión de escribir (SHIFT +) Tab para alinearlo en consecuencia, no es una diferencia real presionar la tecla para reindent el archivo. Además, no debes copiar / pegar el código :)
Ingo
1
@ Winston: incluso Bloques de sangría Notepad ++ cuando uso Tab y Shift-Tab, todavía no he encontrado el atajo vim, pero no lo uso lo suficiente, supongo: p
Matthieu M.
50

Me encanta el importante espacio en blanco de Python. Para mí es el ejemplo perfecto de DRY a nivel sintáctico. La forma legible para indicar dónde comienza y termina un bloque de código es con sangría. Si desea que su código sea legible, debe sangrarlo independientemente del idioma. Es una tontería hacer que el programador especifique esta información dos veces, una para el compilador / intérprete y otra para humanos. Además, la sangría en lenguajes tipo C es similar a un comentario: tiene la intención de mejorar la comprensión, pero el compilador / intérprete no aplica su significado y puede desincronizarse con el significado real (donde están las llaves) muy fácilmente, ofuscando en lugar de aclarar.

dsimcha
fuente
8
+1 para no repetirse. Una buena práctica es sangrar el código para reflejar la estructura de bloque de todos modos, entonces, ¿por qué tener también marcadores de inicio / fin?
Steve314
12

Un espacio en blanco significativo es realmente conveniente para mí. Me hace escribir menos. Formatea el código de forma clara y bastante inequívoca. Debido a esto, hace que el código sea más legible.

(También me gusta el espacio en blanco significativo en Haskell, por las mismas razones).

9000
fuente
1
También habría compartido mi experiencia positiva con el espacio en blanco de Haskell, pero FarmBoy insistió en que uno debe tener 3 meses de experiencia con Python, cualquier otra cosa era especulación. :-)
Ingo
1
Mi experiencia con Python desde 1998, por lo que mi respuesta probablemente califica :) (Lástima que mi experiencia con Haskell es mucho más corta.)
9000
@ 9000 ¡Aunque Haskell llegó antes que Python! : D
pradyunsg
8

Cuando utilicé python por primera vez, el espacio en blanco era nuevo y, por lo tanto, una restricción molesta.

Ahora ni siquiera lo noto. He estado usando Python durante 11 meses.

Matt Ellen
fuente
5

En primer lugar, mis lenguajes básicos son Python, SQL y Java. Me encanta el espacio en blanco de Python: es menos sintaxis y mecanografía, y obliga a las personas a escribir código legible y bien formateado. OTOH, odio la verbosidad de Java, tanto que realmente uso Python para generar toda la plantilla que tengo que escribir en Java, lo que impresiona a todos mis compañeros de trabajo de Java que están asombrados de mi productividad.

Sin embargo, la gran advertencia es cuando copie / pegue código de la web: a menudo causa espacios mixtos y pestañas que requieren un paso adicional para limpiar, y generalmente solo capturo después de una excepción de tiempo de ejecución.

Greg
fuente
Decirle a su editor que sintaxis destaque las pestañas como errores puede ayudar mucho - para vim que uso highlight link RedundantSpaces Error | au BufEnter,BufRead * match RedundantSpaces "\t" | au BufEnter,BufRead * match RedundantSpaces "[[:space:]]\+$"en mi vimrc
Daenyth
4

Si un programador está molesto por la importancia de los espacios en blanco, probablemente no se convertirá en un programador de Python.

BenjaminB
fuente
1
He escuchado a algunas personas predicando Python que dicen que tuvieron sus problemas con The Whitespace Thing (tm) pero que les gustó después de un tiempo. Según mi observación, parece que a medida que más personas se unen a una discusión sobre este tema, la propagación de uno de ellos contando tal historia se acerca a uno. (Editar:
@delnan, puedo suscribirme a esto.
Ingo
3

Apuesto a que encontrarías una superposición considerable entre las personas que tienen un problema con espacios en blanco significativos y aquellos que no tienen experiencia con un buen editor de texto de programador, como Emacs, que maneja la mayoría de las sangrías sin su participación.

En cualquier caso, una vez que haya internalizado Python, ya no es un problema; de hecho, su concisión y el pequeño espacio que ocupa en la pantalla se convierten en una gran ventaja para la legibilidad. Como he estado usando principalmente Python, encuentro que los lenguajes donde hay más redundancia (por ejemplo, Java y C #) son difíciles de disciplinar para escribir. Poner llaves alrededor del código cuya sangría ya hace que su estructura deje en claro mis nervios.

JasonFruit
fuente
3

Para la codificación real, no es nada inconveniente, pero sí beneficioso (ver la respuesta de dsimcha).

Puede ser molesto cuando se trata de tecnologías de comunicaciones que no respetan los espacios en blanco líderes (como muchos foros web no orientados a la programación y también cuando se incrusta el código Python dentro de un lenguaje diferente, como los lenguajes de plantillas HTML), aunque veo que Más que un defecto en las herramientas que eliminan los espacios en blanco principales que un defecto en Python, es cierto que los lenguajes redundantes que expresan la estructura del código dos veces están mejor equipados para manejar entornos tan destructivos (ya que puede pegar el código en un editor y auto- reindent en función de los marcadores estructurales explícitos, o simplemente no les importa si el código solo se ejecuta en lugar de ser leído por humanos).

ncoghlan
fuente
2

No encuentro molesto el espacio en blanco. Encuentro la falta o sangría inconsistente muy molesta en otros idiomas. Entiendo que este problema es uno de los problemas que el estilo pretende resolver.

Python no es uno de mis idiomas principales.

En ocasiones encuentro molesto el manejo de pestañas y espacios en sangría. Esto puede causar problemas al cambiar los editores de una edición a otra, o al editar el código que alguien más escribió. Por lo general, es trivial de resolver.

BillThor
fuente
1
mezclar pestañas y espacio en la sangría de pitón es el camino más corto al infierno: p
Matthieu M.
@Mattieu: Definitivamente, esa es mi molestia.
BillThor
1

Vengo de un fondo C # / Javascript / XBase sin ningún orden en particular, y en mis pinceladas con Python no es una consideración en absoluto para mí. Es como las llaves en otros idiomas: así es como funciona, poner las cosas como dicen las reglas y secar los ojos es mi actitud.

Alan B
fuente