Perché alcune lingue consigliano di utilizzare spazi anziché schede? [chiuso]

9

Forse sono solo in questo, ma poche cose mi infastidiscono come le persone che indentano usando spazi piuttosto che tab. In che modo lo spazio Spazio Spazio Spazio Spazio è più semplice e intuitivo della battitura Tab ? Certo, la larghezza delle schede è variabile, ma è molto più indicativa dello spazio di indentazione rispetto agli spazi. La stessa cosa vale per il backspacing; backspace una o quattro volte?

Perché le lingue come Python consigliano di utilizzare spazi su schede?

    
posta Naftuli Kay 22.11.2011 - 22:44
fonte

5 risposte

14

Coerenza, principalmente.

Inoltre, occasionalmente arriva qualcosa che usa effettivamente gli spazi bianchi - come Python: dimmi, cosa succederà se eseguo il seguente frammento di codice?

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

Answer: You'll get an IndentationError, because those two print statements aren't indented at the same level - and so not part of the same code block. (The first one uses a tab, the second all spaces)

Poi ci sono i casi frustranti quando l'editor di uno sviluppatore ha schede impostate su 8 spazi, e un altro li ha impostati su 4 e qualcuno sta usando 5 per qualche strana ragione ... Può sembrare perfettamente normale su una workstation, ma poi quando è registrati in SVN e qualcun altro si aggiorna, vedranno un orribile, orribile casino.

Quindi questi sono due ottimi motivi per essere sempre coerenti, che si tratti di spazi o schede.

Tuttavia, gli spazi consentono un controllo molto maggiore sul rientro rispetto alle schede e non richiedono alcuna configurazione speciale negli editor perché funzioni. (Anche se può essere reso più semplice - ad esempio, in vim, usa set expandtab per inserire spazi ogni volta che premi scheda)

EDIT: E abbastanza divertente, il sito sembra aver normalizzato le mie schede in spazi in modo che il browser possa visualizzarlo correttamente. Clicca su "modifica" per visualizzare l'originale, schede incluse;)

    
risposta data 22.11.2011 - 23:02
fonte
10

Questo è una buona discussione su indentazione e spazi bianchi in Python; dall'articolo:

[I]t can be a good idea to avoid tabs alltogether, because the semantics of tabs are not very well-defined in the computer world, and they can be displayed completely differently on different types of systems and editors. Also, tabs often get destroyed or wrongly converted during copy & paste operations, or when a piece of source code is inserted into a web page or other kind of markup code.

Per quanto riguarda la tua argomentazione su come premere la barra spaziatrice o il tasto backspace 2 o più volte, poiché la maggior parte degli editor di codice sorgente inserirà un numero configurabile di spazi con una sola pressione del tasto tab, e allo stesso modo unindent, non ci sono più tasti premuti quando si usano gli spazi per il rientro.

Per quanto mi riguarda, preferisco gli spazi perché il codice viene sempre visualizzato con la stessa quantità di indentazione, sia che lo visualizzi in un IDE, sia in less , o Blocco note; cioè gli spazi sono più portabili.

    
risposta data 22.11.2011 - 23:18
fonte
2

In indentazione Python controlla il flusso del programma e quindi è di vitale importanza.
Se si prende il codice formattato con le schede e copiato in modo che le schede vengano modificate o perse, la struttura del codice viene distrutta. Gli spazi sono sempre spazi = molto più sicuri.

Se l'usura della barra spaziatrice ti preoccupa, il tuo editor può probabilmente essere impostato per convertire automaticamente le schede in spazi.

    
risposta data 22.11.2011 - 22:52
fonte
2

Gli spazi dovrebbero sempre essere usati, perché le schede da sole non sono sufficientemente flessibili per molti stili, e la combinazione di linguette e spazi (quasi) produce sempre un disordine assoluto.

Per un esempio di uno stile che generalmente richiede spazi, considera qualcosa come:

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

A meno che tu non voglia rinominare tutte le tue funzioni in un multiplo esatto delle schede di dimensione (meno una per le parentesi), semplicemente non lo farai.

Per quanto riguarda la combinazione di tabulazioni e spazi, ti imbatti quasi subito in un problema serio: le schede non vengono espanse in modo coerente allo stesso modo. Alcuni software considerano una scheda equivalente a un numero specifico di spazi. Altri software espandono una scheda modulo un numero specifico di spazi - ad esempio, un elemento dopo che una scheda inizia sempre con un numero di colonna che è un multiplo di (diciamo) 8.

Anche se puoi assicurarti che gli spazi non si mescolino con le tue schede, hai ancora un problema: le schede funzionano male con i caratteri a larghezza variabile. Questo problema si verifica quando (ad esempio) si desidera che i commenti finali siano allineati:

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

Come stanno adesso, quelli si allineano perfettamente. Visto con un font a larghezza variabile, tuttavia, le cose diventano brutte. Con spazi, i commenti possono (spesso lo faranno) un po 'disallineati. Con le schede, tuttavia, il disallineamento diventa spesso piuttosto radicale:

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

All'improvviso la piccola differenza di larghezza tra "i" e "m" o "x" nel nostro carattere a larghezza variabile è stata ingrandita a un intero punto di tabulazione.

La linea di fondo è che quasi qualsiasi cambiamento nel modo in cui visualizzi il codice con le schede, non importa quanto apparentemente banale, può e di solito produrrà un pasticcio illeggibile.

Per rispondere alle altre domande: altri l'hanno già fatto notare, ma non riesco a immaginare nessuno in un editor di programmazione (o molto altro) che usi effettivamente la barra spaziatrice per inserire gli spazi, quindi la tua domanda su: " digitare spazio spazio spazio spazio "è irrilevante perché nessuno lo fa comunque. Allo stesso modo con back-spacing: è difficile immaginare un editor che richieda di premere BkSpc quattro volte per andare a un punto di tabulazione precedente, quindi (di nuovo) la domanda è irrilevante.

Bottom line: le schede vanno bene se tu (e solo tu) mai guardi il tuo codice, e lo fai sempre con un solo editor che mai riconfigurare (affatto!) Tali condizioni, tuttavia, sono così vicine all'impossibilità di far rispettare che esiste una sola risposta ragionevole: non usare mai tabulazioni.

    
risposta data 23.11.2011 - 00:19
fonte
2

Il grosso problema è l'inconsistenza della larghezza della "tabulazione" a volte sono resi come quattro spazi a volte otto. In molti editor puoi impostarli in modo da 1 a 9 spazi.

Quindi questo trasforma un semplice editor WYSWYG in ciò che vedi è ciò che qualcun altro potrebbe ottenere.

È un problema particolare per Python, ma è anche un problema in tutte le lingue "parentesi graffe" come indentazione è usata per trasmettere significato ai lettori umani e le schede incasinate rendono il codice difficile da leggere.

    
risposta data 23.11.2011 - 03:19
fonte

Leggi altre domande sui tag