Я щойно спробував реалізувати jEdit еластичні вкладки, які надзвичайно добре працюють з мовами програмування, з якими я знайомий (насамперед HTML / XML та схожі на C). Однак, з кодом Python, ось як він відображається (пробіли використовуються замість вкладок для ілюстрації того, як вирівнюються речі):
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
Для такої мови, як Python, яка покладається на інтервал, це переривник угод, якщо ви не відключите функціонал, що надається еластичними вкладками. Такі редактори, як Vim та Emacs, роблять відключення більшості видів функцій простими, якщо ви знаєте назву опції та як її відключити, але цю функціональність потрібно було б відключити для коду, як описано вище.
За словами, це чудово підходить для x86 ASM, C, C ++, Go, XML, HTML та інших, які не так сильно покладаються на пробіл:
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.
}
Я скажу, що діалекти Lisp, такі як Scheme, мають свої умовні умови, які також дозволяють зробити еластичні вкладки рендерингу "потворним" кодом. Якщо я зміню свої параметри табуляції, щоб відповідати умові 2 стовпців і вставляти таблички в незвичних місцях (між функцією та її аргументами):
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
порівняно з більш читаними:
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
Звичайно, цей не такий вже й поганий, як приклад Python, але він, безумовно, зменшує читабельність коду. Хоча мені дуже подобається функціональність, коли кодується щось на зразок C # або C ++, я відхиляюсь від функціональності при кодуванні такою мовою, як Python або Scheme, де пробіл є функціональним та / або візуально корисним. Еластичні вкладки були створені спеціально для того, щоб бути корисними, не вимагаючи окремої утиліти відступу, але, очевидно, це не для всіх мов програмування.