Perché lo spazio bianco finale è un grosso problema? [chiuso]


116

Lo spazio bianco finale è un problema sufficiente per i programmatori che editor come Emacs hanno funzioni speciali che lo evidenziano o lo eliminano automaticamente, e molti standard di codifica richiedono di eliminarne tutte le istanze. Non sono del tutto sicuro del perché. Riesco a pensare a una ragione pratica per evitare spazi bianchi non necessari, ed è che se le persone non sono attente a evitarlo, potrebbero cambiarlo tra i commit, e quindi si diffondono i diff inquinati con linee apparentemente invariate, solo perché qualcuno ha rimosso o aggiunto uno spazio.

Sembra già una buona ragione per evitarlo, ma voglio vedere se c'è di più. Quindi, perché lo spazio bianco finale è un grosso problema?


30
Il trascinamento di spazi bianchi è davvero un rumore da commettere. Non riesco a pensare a nessun altro motivo.
yannis,

17
Un buon strumento diff dovrebbe essere in grado di ignorare lo spazio bianco finale (e anche quello iniziale, se lo si desidera). Dopotutto, Emacs può farlo, perché non i tuoi strumenti diff?
FrustratedWithFormsDesigner

4
Navigare fino alla fine della stringa con il pulsante 'End' potrebbe essere disordinato con un sacco di spazi bianchi finali.
Iarek Kovtunenko,

11
Penso che tu stia ponendo la domanda nel modo sbagliato. Il contrario è: «quali sono i vantaggi di trascinare gli spazi bianchi? ». La risposta diventa abbastanza ovvia quando si pone la domanda giusta;)
deadalnix

7
Forse dovresti provare a programmare in Whitespace . * 8 ')
Mark Booth,

Risposte:


76

Ragioni per cui è importante per me:

  • Quando premo il tasto "Fine", mi aspetto che il cursore si sposta alla fine della riga (a seconda dell'editor che sto usando e di come è configurato) e mi aspetto di poter iniziare subito a digitare. Se il cursore arriva e devo eliminare 3 o 4 caratteri, è fastidioso. Soprattutto se è incoerente in tutti i file.

  • Quando ho valori letterali di stringa che si estendono su più righe, lo spazio bianco finale può rendere la stringa di output non corretta quando viene utilizzata.

Pur non essendo strettamente programmato, gli spazi bianchi possono seriamente rovinare l'immissione dei dati, se c'è un trailing / lead in un file che verrà analizzato e utilizzato come input per qualcos'altro. Ciò accade soprattutto quando un file di input pulito e generato viene sporcato da qualcuno che lo modifica in Excel o qualcosa del genere e quindi trascina spazi bianchi (e altri problemi di formattazione).


8
Il punto 1 è un problema con l'editor, non con lo spazio bianco finale.
Marjan Venema,

33
@MarjanVenema: Sì, un editor potrebbe essere progettato per andare all'ultimo spazio NON bianco, ma poi non avresti mai saputo dello spazio bianco finale (a meno che non sia stato indicato in altro modo - probabilmente troverei strano che END non lo faccia andare alla fine della linea, che è quello a cui sono abituato). Il che sarebbe un problema con i letterali di stringa multilinea. Quindi l'editor dovrebbe sapere che in una stringa a più righe letterale, END dovrebbe passare all'ultimo carattere, incluso lo spazio. L'editor che sto usando non è così intelligente.
FrustratedWithFormsDesigner

2
Aggiungerei la selezione con il mouse è difficile da fare senza selezionare spazi extra e questo potrebbe importare se si tratta di una pasta tagliata. O che genera rumore quando commette (eventualmente si confonde!) Per niente. Non è un grosso problema, ma molti piccoli sguardi. Ti dà la sensazione che il precedente sviluppatore fosse pigro e si aspettasse che te ne andassi nel suo pasticcio.
deadalnix,

1
@deadalnix: ovviamente, ecco perché hai bisogno di un buon editor con opzioni per soddisfare le preferenze della maggior parte delle persone. E quindi il punto 1 è un problema con l'editor e non con lo spazio bianco finale.
Marjan Venema,

1
Il punto 1 è precisamente il motivo per cui preferisco avere un particolare stile di spazio bianco finale: le righe vuote sono rientrate con il codice che separano. Ciò consente di inserire immediatamente un nuovo codice senza dover rientrare.
Xiong Chiamiov

29

Odio davvero lo spazio bianco finale, ma il motivo esatto è un po 'vago.

Immagino che l'origine di quel sentimento non sia nella programmazione, ma nel campo dell'editoria desktop. Hai mai ricevuto un documento digitato da qualcun altro che doveva essere composto in una pubblicazione? In tutte le pubblicazioni moderne, specialmente quando si usano le colonne, è consuetudine che le frasi si susseguano in sequenza all'interno di un paragrafo, non iniziando una nuova riga per ogni frase. Bene, quando c'è spazio vuoto finale, ci vuole molto più sforzo per farlo bene (molta ricerca e sostituzione di azioni che eliminano i doppi spazi, ecc ...).

Altre ragioni (nella programmazione), non buone ragioni, lo so, ma disturbano la mia psiche subconscia in modo così aggravante che mi costringono ad eliminarla:

  • Richiede più spazio di archiviazione del necessario
  • Il parser dovrà saltare un carattere in più senza una buona ragione durante la compilazione
  • Alcuni editor potrebbero aggiungere una riga vuota aggiuntiva quando WordWrap è attivo e lo spazio finale non si adatta

Si si lo so! Lo so, questi sono motivi spazzatura. Non sono un perfezionista, ma ... forse lo sono?

L'ultima ragione che mi viene in mente è il movimento incoerente del cursore. Sembra che il cursore sia sospeso nel nulla alla fine di una linea, ogni passo a destra può farla cadere o librarsi ulteriormente in misura sconosciuta, sembra solo instabile (come quei blocchi invisibili o che scompaiono che Super Mario saltava avanti).

Probabilmente mi viene diagnosticata la fobia spaziale?


Non è il mio campo, ma mi sembra strano ... che tipo di sistema di composizione tipografica usi lì nella pubblicazione desktop, che per impostazione predefinita non ignora gli spazi finali / multipli ? Ho pensato che il modo in cui LaTeX e la maggior parte dei linguaggi di programmazione lo facevano era standard ovunque, tranne nella spazzatura WYSIWYG a livello di consumatore.
sinistra il

Adobe InDesign (rientra anche nella spazzatura WYSIWYG a livello di consumatore?). Ignorerà gli spazi finali, sì, ma sostituirà tutti gli avanzamenti riga con spazi in un paragrafo e finirai con spazi doppi (che non vengono ignorati), quindi è necessario un rimpiazzo aggiuntivo per eliminarli.
Louis Somers,

"Desktop publishing" non è qualcosa che fai con un "sistema di composizione".
rakslice,

22

Molte di queste risposte quasi toccano il motivo per cui è male per me, ma sostanzialmente: "rompe" gli editor di testo. La mia esperienza è con vim.

Vim è progettato in modo tale che le azioni comuni si associno alle lettere in modo così pulito che non devi nemmeno pensare a quale lettera o combinazione di tasti colpire. Vari tasti di scelta rapida consentono al cursore di saltare il testo così rapidamente che bastano solo un paio di tasti per portarlo dove vuoi. Anche cose come piegare blocchi di codice sono veloci, poiché puoi premere END o $ per saltare alla fine della linea, dove il cursore dovrebbe sovrapporsi {o} o (o) o qualcosa del genere - non è necessario interrompere il flusso di pensiero verso farsi un'idea sullo schermo.

Ma poi arriva un po 'di spazio bianco finale e i movimenti del cursore non sono più prevedibili. Il tuo processo di digitazione viene interrotto perché qualcosa che non riesci a vedere sta influenzando la posizione del cursore, quindi devi interrompere il treno di pensieri per inviarlo dove dovrebbe essere.

Hai mai notato quanto le persone si seccano quando sono veramente concentrate su un'attività e qualcuno le interrompe? Sì, trovare spazi vuoti finali quando meno è previsto è esattamente così.

Come sidenote, ho anche notato che le persone che non si preoccupano di trascinare gli spazi bianchi sono quelle che usano il mouse per la navigazione e tendono a essere dattilografi più lenti a causa di ciò ...


2
Come sidenote, la velocità di battitura non ha nulla a che fare con l'uso del mouse per la navigazione o meno. Un po 'di navigazione è perfettamente adatta per un mouse. ; p
Steven Jeuris,

2
Se usi vim puoi rimuovere rapidamente tutti gli spazi bianchi finali:%s/ *$//
Giorgio,

1
@Giorgio Lo so, ma non posso farlo in qualsiasi momento perché conta come un cambiamento nel controllo della versione
Izkata,

@izkata: True. Riformatto i file che devo modificare prima di archiviarli, ma questa è una battaglia persa se altri sviluppatori continuano a archiviare i file con spazi vuoti finali.
Giorgio,

17

Sorprendentemente, manca la risposta più ovvia: lo spazio bianco finale può e produrrà bug difficili da trovare.

La situazione più ovvia sono le stringhe multilinea. Python, JavaScript e Bash sono alcuni esempi delle lingue che possono essere influenzate da questo:

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

produce:

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

che è in qualche modo criptico e difficile da risolvere se l'editor non è configurato per visualizzare caratteri di spazi bianchi.

Mentre l' evidenziazione della sintassi può aiutare a evitare tali casi, è ancora più semplice non avere il problema in primo luogo non lasciando spazio bianco alla fine delle righe. Questo è il motivo per cui alcuni controlli di stile generano un avviso quando incontrano spazi vuoti finali e alcuni editor li ritagliano automaticamente.

inserisci qui la descrizione dell'immagine

Illustrazione: l'evidenziazione della sintassi può aiutare a evitare spazi bianchi finali in situazioni in cui può portare a bug, ma non fare affidamento solo su di esso.

Un altro contesto, brevemente menzionato in una risposta precedente , sono i dati memorizzati in file.

Ad esempio, i file CSV che contengono spazi vuoti finali possono causare incoerenza dei dati che è anche molto difficile da rilevare: i parser conformi agli standard elimineranno gli spazi bianchi (lo standard indica che lo spazio bianco iniziale o finale è irrilevante, a meno che non sia delimitato da virgolette doppie), ma alcuni parser potrebbero comportarsi in modo errato e mantenere lo spazio bianco come parte di un valore.

Altri formati personalizzati possono specificamente considerare che gli spazi bianchi sono la parte del valore, portando a situazioni di debug coerenti ma ancora difficili.


14

Di recente ho trascorso una giornata alla ricerca di un bug che si è rivelato essere uno spazio bianco finale inatteso nei dati.


13
Penso che sia un bug; il codice che elabora l'input generato dall'uomo dovrebbe scartare gli spazi bianchi finali e spesso dovrebbero essere scartati anche gli spazi bianchi iniziali.
Kevin Cline,

@kevincline - Dovrebbe essere almeno. Se non è visibile sullo schermo o sulla stampa, non voglio pensarci.
Rook,

6
Perché hai trascorso una giornata alla ricerca di un bug, trascinare gli spazi bianchi è un grosso problema? Modifica la tua risposta per essere più generale di così. Aggiungi un po 'di background, argomentazioni, ... Personalmente non ho mai avuto problemi di spazio bianco finale, ma non lo uso come conclusione che neanche loro sono un problema.
Steven Jeuris,

2
@Steven Trailing whitespace ha causato un bug che era difficile da rintracciare. Mi sembra una buona risposta. Puoi immaginare come alcuni codici di analisi dei dati potrebbero rompersi in quella situazione.
Will Sheppard,

Ho rimosso gli spazi bianchi alla fine dei dati e ora un test fallisce. Ne sei responsabile. Come ti chiami? Dove devo inviare il conto?
Thomas Weller,

8

Quando seleziono il codice sorgente del programma per copiarlo e incollarlo (o eliminarlo) trovo un po 'fastidioso vedere tutto lo spazio bianco extra irregolare alla fine delle righe: dato che devo leggere il codice mentre lo seleziono , lo spazio bianco finale è un rumore non necessario. Esempio (i punti rappresentano lo spazio bianco):

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

Questo esempio è artificiale, ma ho visto un sacco di codice simile a questo.


7

Oltre all'ovvio problema che interrompe l'analisi in alcuni casi? Come ha notato un altro poster, può causare errori impercettibili e difficili da rintracciare. Lo spazio bianco non è sempre insignificante. In alcuni casi, gli spazi vuoti finali possono cambiare significativamente il significato di una riga di codice o di dati.

Nella maggior parte dei casi lo spazio bianco è lì per formattare il codice per i lettori umani. Gli spazi bianchi finali possono indicare diverse cose tra cui:

  • Una dichiarazione incompleta;
  • Un commento mancante;
  • Una modifica errata; o
  • Modifica sciatta.

Due di questi possono comportare un funtioning errato e un altro può rendere più difficile la comprensione del codice.


4

Esistono linguaggi di programmazione sensibili allo spazio bianco di fine linea. Ad esempio, uno script TCL genererà un errore se c'è uno spazio bianco alla fine di una riga.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.