Các Lập Trình Viên Bác Bỏ Tuyên Bố "Cuộc Chiến Tabs vs Spaces Đã Kết Thúc", Châm Ngòi Lại Cuộc Tranh Luận Nóng Bỏng

Nhóm Cộng đồng BigGo
Các Lập Trình Viên Bác Bỏ Tuyên Bố "Cuộc Chiến Tabs vs Spaces Đã Kết Thúc", Châm Ngòi Lại Cuộc Tranh Luận Nóng Bỏng

Thế giới lập trình đã bùng nổ trong cuộc thảo luận sôi nổi sau khi một bài viết gần đây tuyên bố kết thúc cuộc chiến huyền thoại giữa tabs và spaces trong việc thụt lề, với spaces được cho là đã giành chiến thắng. Tuy nhiên, phản ứng của cộng đồng lập trình viên cho thấy cuộc chiến này còn rất xa mới kết thúc.

Hình ảnh hóa cuộc tranh luận bền bỉ: Tabs so với Spaces
Hình ảnh hóa cuộc tranh luận bền bỉ: Tabs so với Spaces

Lập Luận Về Khả Năng Tiếp Cận Và Tính Linh Hoạt Nổi Lên Trở Lại

Những người ủng hộ tabs nhanh chóng tập hợp quanh lập luận cốt lõi của họ: khả năng tiếp cận và quyền lựa chọn của người dùng. Nhiều lập trình viên nhấn mạnh rằng tabs cho phép từng lập trình viên cá nhân thiết lập độ rộng hiển thị theo sở thích của họ, điều này đặc biệt quan trọng đối với những người khiếm thị hoặc có thiết lập màn hình khác nhau. Tính linh hoạt này có nghĩa là một lập trình viên có thể xem code với tabs rộng 2 khoảng trắng trong khi người khác sử dụng 4 khoảng trắng, tất cả từ cùng một file nguồn.

Lập luận phản bác từ những người ủng hộ spaces tập trung vào vấn đề tính nhất quán và căn chỉnh. Khi code cần xuống dòng ở độ dài dòng cụ thể hoặc khi các lập trình viên tạo ra sự căn chỉnh trực quan trong code của họ, tabs có thể gây ra vấn đề vì các độ rộng tab khác nhau khiến code hiển thị khác nhau với mỗi người xem.

Sở thích về độ rộng Tab phổ biến

  • 2 khoảng trắng: Được ưa chuộng trong phát triển web ( JavaScript , CSS , HTML )
  • 3 khoảng trắng: Được một số người ủng hộ vì tính dễ đọc tối ưu
  • 4 khoảng trắng: Mặc định phổ biến nhất trong các ngôn ngữ lập trình
  • 8 khoảng trắng: Mặc định truyền thống của Unix/terminal, được sử dụng trong một số dự án C

Ký tự Tab cho phép người dùng cấu hình độ rộng hiển thị, trong khi khoảng trắng ép buộc khoảng cách cố định

Phương Pháp Kết Hợp Nhận Được Sự Chú Ý

Một phần đáng kể của cộng đồng đã thảo luận về chiến lược tabs cho thụt lề, spaces cho căn chỉnh. Phương pháp lai này cố gắng có được điều tốt nhất của cả hai thế giới bằng cách chỉ sử dụng tabs cho cấu trúc code cơ bản và spaces để sắp xếp các phần tử trong cùng mức logic. Tuy nhiên, nhiều lập trình viên lưu ý rằng phương pháp này khó thực thi trong thực tế, vì tính chất vô hình của các ký tự này khiến các thành viên trong nhóm dễ dàng trộn lẫn chúng một cách không chính xác.

Công Cụ Hiện Đại Thay Đổi Cuộc Chơi

Cuộc thảo luận đã tiết lộ cách các công cụ phát triển hiện đại đã thay đổi bối cảnh của cuộc tranh luận. Các trình định dạng tự động như gofmt của Go , trình định dạng của Rust , và Prettier cho JavaScript giờ đây xử lý việc thụt lề tự động, loại bỏ phần lớn việc ra quyết định thủ công từng thúc đẩy những cuộc tranh luận này. Một số lập trình viên lập luận rằng điều này khiến toàn bộ cuộc tranh luận trở nên ít liên quan hơn, vì công cụ thực thi tính nhất quán bất kể sở thích cá nhân.

Điều quan trọng nhất là tính nhất quán. Tôi đã trở thành một fan hâm mộ lớn của việc giao phó các cuộc tranh luận tabs vs spaces cho một trình định dạng tự động.

Các công cụ Auto-formatter hiện đại theo ngôn ngữ lập trình

Ngôn ngữ Công cụ định dạng Kiểu mặc định
Go gofmt Tab (bắt buộc)
Rust rustfmt 4 khoảng trắng
JavaScript/TypeScript Prettier 2 khoảng trắng
Dart dartfmt 2 khoảng trắng
Gleam Công cụ định dạng tích hợp 2 khoảng trắng

Các công cụ auto-formatter giảm thiểu việc phải quyết định định dạng thủ công và đảm bảo tính nhất quán

Các Con Số Không Kể Hết Câu Chuyện

Trong khi bài viết gốc trích dẫn rằng khoảng 90% các ngôn ngữ lập trình mặc định sử dụng spaces, các thành viên cộng đồng đã đặt câu hỏi liệu chỉ số này có thực sự phản ánh việc sử dụng thực tế hay không. Một số đề xuất rằng việc đo lường theo số dòng code được viết hoặc file được xử lý có thể cho thấy tabs đang giữ vị thế mạnh hơn, đặc biệt là do sự phổ biến của chúng trong các ngôn ngữ lớn như Go và trong các codebase cũ.

Cuộc tranh luận cũng tiết lộ những biến thể thú vị trong độ rộng thụt lề ưa thích, với một số lập trình viên ủng hộ việc thụt lề 3 khoảng trắng là tối ưu cho khả năng đọc, mặc dù nó không phải là lũy thừa của hai.

Các Ngôn Ngữ Lập Trình Theo Kiểu Thụt Lề Mặc Định

Kiểu Thụt Lề Ngôn Ngữ
Dấu cách (2) Ruby , JavaScript , TypeScript , CSS , HTML , JSON
Dấu cách (4) Python , Java , C , PHP , Kotlin , Swift
Tab Go , Assembly , Hare , Odin
Hỗn hợp/Thay đổi C , C++ (tùy thuộc vào dự án)

Khoảng 90% các ngôn ngữ lập trình chính thống mặc định sử dụng dấu cách theo hướng dẫn phong cách chính thức

Kết Luận

Thay vì giải quyết vấn đề, tuyên bố chiến thắng của spaces trong bài viết đã làm tái sinh một trong những cuộc tranh luận lâu dài nhất của lập trình. Phản ứng của cộng đồng chứng minh rằng cả hai phe đều duy trì những lập luận kỹ thuật và triết học mạnh mẽ. Trong khi công cụ hiện đại có thể giảm tác động thực tế của lựa chọn này, sự căng thẳng cơ bản giữa tiêu chuẩn hóa và cá nhân hóa trong môi trường phát triển đảm bảo rằng cuộc thảo luận này có thể sẽ tiếp tục trong nhiều năm tới.

Niềm đam mê trong những phản ứng này cho thấy rằng đối với nhiều lập trình viên, việc lựa chọn giữa tabs và spaces đại diện cho điều gì đó sâu sắc hơn sở thích định dạng đơn thuần - nó phản ánh các triết lý khác nhau về cách code nên được viết, chia sẻ và duy trì trong môi trường cộng tác.

Tham khảo: Tabs vs. Spaces: The War Is Over