Câu trả lời là không thể có một ký tự thụt thích hợp duy nhất cho mọi tình huống. Định dạng bằng cách sử dụng các ký tự là không linh hoạt và có thể gây ra xung đột khi các kiểu khác nhau được sử dụng trong một nhóm.
Phương pháp duy nhất để định dạng mã hoàn hảo và linh hoạt với các kiểu định dạng khác nhau là thực hiện nó hầu như, không có bất kỳ ký tự thụt đầu dòng nào. Trình soạn thảo mã duy nhất tôi biết hỗ trợ điều này mặc dù là trình soạn thảo được sử dụng trong mẫu bên dưới:
Để thể hiện định dạng ảo , ảnh chụp màn hình bên dưới là từ trình soạn thảo XSLT * sử dụng phương pháp thụt lề này (cũng có một đoạn video ngắn ở đây ). Mỗi ký tự trong XSLT đã được tô sáng màu vàng, nhằm mục đích minh họa, cho phép nhìn thấy rõ ràng các tab hoặc ký tự khoảng trắng trong nội dung. Việc thụt mã được xử lý bởi hệ thống kết xuất của trình soạn thảo điều chỉnh lề trái (có nền trắng).
Các ký tự không gian hàng đầu duy nhất đứng trước các dòng Sách , bởi vì đây là nội dung văn bản bằng chữ, không phải mã, các ký tự khoảng trắng này phải được giữ nguyên.
Với định dạng ảo, bạn chọn độ rộng thụt lề cho phù hợp với môi trường và kiểu thụt đầu dòng mà không ảnh hưởng đến bất kỳ ký tự nào trong tệp nguồn. Bạn thậm chí có thể đặt chiều rộng thụt thành 0, nếu bạn cần một chế độ xem phẳng của mã như dưới đây:
Để đối chiếu điều này với định dạng ký tự không gian, cùng một XSLT được mở trong trình chỉnh sửa không có định dạng ảo được chuyển đổi bởi trình định dạng tự động của trình soạn thảo đó sang:
Các khối màu vàng trống lớn hơn trong ảnh chụp màn hình ở trên hiển thị rõ ràng các ký tự khoảng trắng được thêm bởi trình định dạng của trình chỉnh sửa thông thường. Thật không may, giờ đây chúng không thể được phân biệt với nội dung thực nên XSLT sẽ phải được sửa đổi để khắc phục vấn đề này.
Tóm lược
XSLT có thể là một trường hợp cực đoan, nhưng nguyên tắc này đúng với nhiều ngôn ngữ lập trình: Các ký tự nên được sử dụng cho nội dung và một phương pháp thay thế được tìm kiếm khi định dạng.
** Tiết lộ: Trình chỉnh sửa XSLT với định dạng ảo được phát triển bởi chính công ty của tôi *