Ho appena provato l'implementazione di tablops elastico di jEdit, che funziona incredibilmente bene con i linguaggi di programmazione con cui ho familiarità (principalmente HTML / XML e linguaggi simili a C). Con il codice Python, tuttavia, ecco come viene reso (spazi usati al posto delle schede per illustrare come le cose si allineano):
def foo(x):
'''<1 tab before the docstring.
No tab <tab
No tab <tab
<tab <another tab
<tab <another tab
<tab'''
if 1 or 2: #<Tab before this comment
yield True
Per un linguaggio come Python che si basa sulla spaziatura, questo è un deal-breaker a meno che non si disabiliti la funzionalità fornita da tabulazioni elastiche. Editori come Vim ed Emacs rendono semplice disabilitare molti tipi di funzionalità se si conosce il nome dell'opzione e come disabilitarlo, ma questa funzionalità dovrebbe essere disabilitata per il codice come sopra.
Detto questo, è fantastico per x86 ASM, C, C ++, Go, XML, HTML e altri che non si affidano troppo agli spazi:
import (
"fmt" // We love formatting functions.
"io" // Because I/O is useful.
"os" // Can't open a file without os.Open!
)
type Foo struct {
Field1 int // This is properly aligned
ReallyLongField2 string // with this.
privateField io.Reader // Elastic tabstops are great for Go.
}
Dirò che i dialoghi Lisp come Scheme hanno le loro convenzioni che renderebbero anche i tabstops elastici il codice "brutto". Se cambio le mie impostazioni tabstop in modo che corrispondano alla convenzione di 2 colonne e inserisca tabstop in punti insoliti (tra una funzione e i suoi argomenti):
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
vs. il più leggibile:
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
Certo, questo non è così male come l'esempio di Python, ma sicuramente riduce la leggibilità del codice. Mentre mi piace molto la funzionalità quando si codifica in qualcosa come C # o C ++, aborrisco la funzionalità quando si codifica in una lingua come Python o Scheme in cui gli spazi bianchi sono funzionali e / o visivamente utili. Le tabulazioni elastiche sono state create appositamente per essere utili senza richiedere un'utilità di indentazione separata, ma chiaramente non sono pensate per tutti i linguaggi di programmazione.