Tôi vừa thử thực hiện các tab tab đàn hồi của jEdit, hoạt động rất tốt với các ngôn ngữ lập trình mà tôi quen thuộc (chủ yếu là các ngôn ngữ giống như HTML / XML và C). Tuy nhiên, với mã Python, đây là cách nó được hiển thị (khoảng trắng được sử dụng thay cho các tab để minh họa cách sắp xếp mọi thứ):
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
Đối với một ngôn ngữ như Python dựa vào khoảng cách, đây là một công cụ giải quyết trừ khi bạn vô hiệu hóa chức năng được cung cấp bởi các tab đàn hồi. Các trình soạn thảo như Vim và Emacs làm cho việc vô hiệu hóa hầu hết các loại chức năng trở nên đơn giản nếu bạn biết tên của tùy chọn và cách tắt nó, nhưng chức năng này sẽ được yêu cầu vô hiệu hóa cho mã như trên.
Điều đó đang được nói, thật tuyệt vời cho x86 ASM, C, C ++, Go, XML, HTML và những thứ khác không phụ thuộc vào khoảng trắng quá nhiều:
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.
}
Tôi sẽ nói rằng các phương ngữ Lisp như Scheme có các quy ước riêng của chúng cũng sẽ làm cho các tabstop đàn hồi đưa ra mã "xấu xí". Nếu tôi thay đổi cài đặt tabstop của mình để khớp với quy ước của 2 cột và chèn các tab ở vị trí bất thường (giữa một hàm và các đối số của nó):
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
so với càng dễ đọc hơn:
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
Cấp, cái này không tệ như ví dụ Python, nhưng nó chắc chắn làm giảm khả năng đọc mã. Mặc dù tôi rất thích chức năng khi mã hóa bằng thứ gì đó như C # hoặc C ++, tôi ghê tởm chức năng khi mã hóa bằng ngôn ngữ như Python hoặc Scheme trong đó khoảng trắng là chức năng và / hoặc trực quan hữu ích. Các tab đàn hồi được tạo ra đặc biệt hữu ích mà không yêu cầu tiện ích thụt đầu dòng riêng biệt, nhưng rõ ràng nó không có nghĩa cho tất cả các ngôn ngữ lập trình.