Perché il trailing whitespace è un grosso problema? [chiuso]

111

Lo spazio bianco finale è un problema abbastanza per i programmatori che gli editor come Emacs hanno funzioni speciali che lo evidenziano o lo eliminano automaticamente, e molti standard di codifica richiedono l'eliminazione di tutte le sue istanze. Non sono del tutto sicuro del perché comunque. Posso pensare ad un motivo pratico per evitare uno spazio vuoto non necessario, ed è che se le persone non fanno attenzione a evitarlo, potrebbero cambiarlo tra i commit, e quindi le diffs vengono inquinate con linee apparentemente invariate, solo perché qualcuno ha rimosso o aggiunto uno spazio.

Questo sembra già un buon motivo per evitarlo, ma voglio vedere se c'è dell'altro. Quindi, perché la fine dello spazio bianco è così grande?

    
posta EpsilonVector 24.11.2011 - 18:56
fonte

8 risposte

75

Motivi per cui è importante per me:

  • Quando premo il tasto "Fine", mi aspetto che il cursore raggiunga la fine della riga (a seconda di quale editor sto utilizzando e di come è configurato) e mi aspetto di poter iniziare a digitare correttamente lontano. Se il cursore arriva e devo cancellare 3 o 4 caratteri, è fastidioso. Soprattutto se è incoerente in tutto il / i file.

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

Pur non essendo strettamente programmabili, lo spazio bianco può compromettere seriamente l'immissione dei dati, se c'è un trailing / leading in un file che verrà analizzato e utilizzato come input per qualcos'altro. Questo accade di più quando un file di input pulito e generato viene sporcato da qualcuno che lo modifica in Excel o qualcosa del genere e quindi lo spazio vuoto finale (e altri problemi di formattazione) può insinuarsi.

    
risposta data 24.11.2011 - 19:14
fonte
28

Odio davvero gli spazi bianchi finali, ma la ragione esatta è un po 'vaga.

Credo 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 inserito in una pubblicazione? In tutte le pubblicazioni moderne, specialmente quando si usano le colonne, è consuetudine che le frasi si susseguano sequenzialmente all'interno di un paragrafo, senza iniziare una nuova riga per ogni senziente. Bene, quando c'è uno spazio vuoto finale, ci vuole molto più impegno per farlo bene (molte azioni di ricerca e sostituzione che eliminano i doppi spazi, ecc ...).

Altre ragioni (in programmazione), non buone ragioni, lo so, ma infastidiscono la mia psiche subconscia in modo così aggravante e intenso che mi costringono ad eliminarlo:

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

Sì, sì lo so! Lo so, queste sono ragioni di spazzatura. Non sono un perfezionista, ma ... beh, forse lo sono?

L'ultima ragione per cui posso pensare è il movimento inconsistente del cursore. Sembra come se il cursore fosse sospeso nell'aria alla fine di una linea, ogni gradino a destra potrebbe causare una caduta dell'etere o librarsi più in là di un'estensione sconosciuta, sembra semplicemente instabile (come quei blocchi invisibili o in via di scomparsa dove Super Mario saltava su.

Probabilmente mi può essere diagnosticato un trailpacefobia?

    
risposta data 24.11.2011 - 19:50
fonte
20

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

Vim è progettato in modo che le azioni comuni siano mappate in modo così chiaro da non dover nemmeno pensare a quale lettera o combinazione di tasti colpire. Vari tasti di scelta rapida consentono al cursore di saltare rapidamente intorno al testo in modo tale che bastino pochi tasti per portarlo ovunque tu voglia. Anche cose come piegare blocchi di codice è veloce, dato che puoi colpire END o $ per saltare alla fine della linea, dove il cursore dovrebbe sovrapporsi {o} o (o) o qualcosa - non c'è bisogno di rompere il tuo flusso di pensieri avere un'idea sullo schermo.

Ma poi arriva uno spazio bianco finale, e i movimenti del cursore non sono più prevedibili. Il processo di digitazione è stato interrotto perché qualcosa che non puoi vedere influisce su dove va il cursore, quindi devi interrompere il tuo pensiero per inviarlo dove dovrebbe essere.

Hai mai notato quanto le persone infastidite si sentono quando sono veramente concentrate su un compito e qualcuno le interrompe? Sì, trovare spazi bianchi finali quando meno ci si aspetta è esattamente così.

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

    
risposta data 24.11.2011 - 23:28
fonte
17

Sorprendentemente, manca la risposta più ovvia: lo spazio bianco in coda può e produce errori 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 i caratteri di spaziatura.

Mentre evidenziazione della sintassi può aiutare a evitare tali casi, è persino più facile non avere il problema in primo luogo non lasciando spazi bianchi alla fine delle linee. Questo è il motivo per cui alcuni controllori di stile generano un avviso quando incontrano spazi bianchi finali e alcuni editor li ritagliano automaticamente.

Illustrazione:l'evidenziazionedellasintassipuòaiutareaevitarelospaziovuotofinaleinsituazioniincuipuòportareabug,manonfareaffidamentosolosudiesso.

Unaltrocontesto,brevementemenzionatoin una risposta precedente , sono i dati memorizzati nei file.

Ad esempio, i file CSV che contengono spazi bianchi finali possono causare incoerenza dei dati che è anche molto difficile da rilevare: i parser conformi agli standard ridurranno gli spazi bianchi (lo standard indica che gli spazi bianchi iniziali o finali sono irrilevanti, a meno delimitati da virgolette doppie) ), ma alcuni parser potrebbero comportarsi male e mantenere gli spazi bianchi come parte di un valore.

Altri formati personalizzati possono considerare specificamente che lo spazio bianco è la parte del valore, che porta a situazioni coerenti ma ancora difficili da debug.

    
risposta data 23.09.2015 - 16:36
fonte
14

Recentemente ho passato una giornata alla ricerca di un bug che si è rivelato un trailing inaspettato spazio bianco nei dati.

    
risposta data 24.11.2011 - 19:22
fonte
8

Quando seleziono il codice sorgente del programma per copiarlo e incollarlo (o cancellarlo) trovo un po 'fastidioso vedere tutto lo spazio bianco extra irregolare alla fine delle righe: poiché devo leggere il codice mentre io lo sto selezionando, 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.

    
risposta data 24.11.2011 - 19:42
fonte
7

Oltre all'ovvio problema che rompe l'analisi in alcuni casi? Come notato da un altro poster, può causare errori sottili e difficili da tracciare. Lo spazio bianco non è sempre insignificante. In alcuni casi, lo spazio bianco finale può modificare in modo significativo il significato di una riga di codice o 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
  • Editing sciatto.

Due di questi potrebbero causare un funtioning scorretto e un altro potrebbe rendere più difficile la comprensione del codice.

    
risposta data 25.11.2011 - 07:09
fonte
4

Esistono linguaggi di programmazione sensibili agli spazi bianchi di fine riga. Ad esempio, uno script TCL darà un errore se c'è uno spazio bianco alla fine di una riga.

    
risposta data 23.09.2015 - 13:27
fonte

Leggi altre domande sui tag