Tại sao dấu vết khoảng trắng là một vấn đề lớn? [đóng cửa]


116

Trailing whitespace là một vấn đề đối với các lập trình viên rằng các biên tập viên như Emacs có các chức năng đặc biệt làm nổi bật nó hoặc tự động loại bỏ nó, và nhiều tiêu chuẩn mã hóa yêu cầu bạn loại bỏ tất cả các phiên bản của nó. Tôi không hoàn toàn chắc chắn tại sao mặc dù. Tôi có thể nghĩ ra một lý do thực tế để tránh khoảng trắng không cần thiết, và đó là nếu mọi người không cẩn thận trong việc tránh nó, thì họ có thể thay đổi nó giữa các cam kết, và sau đó chúng tôi bị ô nhiễm với những đường dường như không thay đổi, chỉ vì ai đó đã xóa hoặc thêm một không gian.

Đây có vẻ là một lý do khá tốt để tránh nó, nhưng tôi muốn xem liệu có nhiều hơn thế không. Vì vậy, tại sao dấu vết khoảng trắng là một vấn đề lớn như vậy?


30
Trailing khoảng trắng thực sự là tiếng ồn cam kết. Không thể nghĩ ra bất kỳ lý do nào khác.
yannis

17
Một công cụ tìm khác biệt tốt sẽ có thể bỏ qua dấu vết (và cũng dẫn đầu, nếu bạn muốn) khoảng trắng. Rốt cuộc, Emacs có thể làm điều đó, tại sao không phải là công cụ diff của bạn?
Thất vọngWithFormsDesigner

4
Điều hướng đến cuối chuỗi bằng nút 'Kết thúc' có thể lộn xộn với nhiều khoảng trắng ở cuối.
Iarek Kovtunenko

11
Tôi nghĩ rằng bạn đang đặt câu hỏi sai cách. Một cách khác là: «lợi thế của dấu trắng là gì? ». Câu trả lời trở nên khá rõ ràng khi đặt câu hỏi đúng;)
deadalnix

7
Có lẽ bạn nên thử lập trình trong Whitespace . * 8 ')
Đánh dấu gian hàng

Câu trả lời:


76

Những lý do quan trọng đối với tôi:

  • Khi tôi nhấn phím "Kết thúc", tôi hy vọng con trỏ sẽ đi đến cuối dòng (tùy thuộc vào trình soạn thảo nào tôi đang sử dụng và cách cấu hình) và tôi hy vọng có thể bắt đầu nhập ngay. Nếu con trỏ đến đó và tôi phải xóa 3 hoặc 4 ký tự, điều đó thật khó chịu. Đặc biệt là nếu nó không nhất quán trong toàn bộ (các) tệp.

  • Khi tôi có chuỗi ký tự bao trùm nhiều dòng, khoảng trắng theo sau có thể làm cho chuỗi đầu ra trông không chính xác khi sử dụng.

Mặc dù không lập trình nghiêm ngặt, khoảng trắng có thể gây rối nghiêm trọng cho việc nhập dữ liệu, nếu có dấu / dẫn trong một tệp sẽ được phân tích cú pháp và được sử dụng làm đầu vào cho một thứ khác. Điều này xảy ra nhiều nhất khi một tệp đầu vào được tạo sạch sẽ bị bẩn do ai đó chỉnh sửa nó trong Excel hoặc một cái gì đó và sau đó theo dõi khoảng trắng (và các vấn đề định dạng khác) có thể xuất hiện.


8
Điểm 1 là một vấn đề với trình soạn thảo của bạn, không phải với khoảng trắng ở cuối.
Marjan Venema

33
@MarjanVenema: Có, một trình soạn thảo có thể được thiết kế để đi đến khoảng trắng NON cuối cùng, nhưng sau đó bạn sẽ không bao giờ biết về khoảng trắng ở cuối (trừ khi nó được chỉ ra theo một cách khác - có lẽ tôi cũng thấy lạ là END không Tôi không đi đến cuối dòng, đó là những gì tôi đã từng sử dụng). Đó sẽ là một vấn đề với chuỗi ký tự nhiều dòng. Vì vậy, biên tập viên sẽ phải biết rằng trong một chuỗi nhiều dòng, END nên đi đến ký tự cuối cùng, bao gồm cả khoảng trắng. Trình chỉnh sửa tôi đang sử dụng không thông minh.
Thất vọngWithFormsDesigner

2
Tôi sẽ thêm lựa chọn bằng chuột rất khó thực hiện nếu không chọn thêm khoảng trắng và điều đó có thể quan trọng nếu đó là để cắt dán. Hoặc là nó tạo ra tiếng ồn khi cam kết (cuối cùng là confilcts!) Không có gì. Không có vấn đề rất lớn, nhưng rất nhiều bất ổn nhỏ. Nó mang lại cảm giác rằng các nhà phát triển trước đó lười biếng và mong đợi bạn rời đi trong mớ hỗn độn của anh ấy / cô ấy.
deadalnix

1
@deadalnix: tất nhiên, đó là lý do tại sao bạn cần một biên tập viên giỏi với các tùy chọn phù hợp với hầu hết sở thích của mọi người. Và do đó, điểm 1 là một vấn đề với trình soạn thảo và không phải là khoảng trắng ở cuối.
Marjan Venema

1
Điểm 1 chính xác là lý do tại sao tôi thích có một kiểu khoảng trắng đặc biệt: các dòng trống được thụt vào với mã chúng tách rời. Điều này cho phép mã mới được chèn ngay lập tức mà không cần phải thụt lề.
Xiong Chiamiov

29

Tôi thực sự ghét khoảng trắng dấu vết, nhưng lý do chính xác là một chút mơ hồ.

Tôi đoán nguồn gốc của cảm giác đó không phải trong lập trình, mà là trong lĩnh vực xuất bản máy tính để bàn. Bạn đã bao giờ có một tài liệu được gõ bởi người khác cần được sắp chữ vào một ấn phẩm chưa? Trong tất cả các ấn phẩm hiện đại, đặc biệt là khi sử dụng các cột, có các câu theo sau một cách tuần tự trong một đoạn, không bắt đầu một dòng mới cho mỗi câu. Chà, khi có khoảng trắng kéo dài, phải mất nhiều nỗ lực hơn để làm cho đúng (rất nhiều tìm kiếm và thay thế các hành động loại bỏ khoảng trắng kép, v.v ...).

Những lý do khác (trong lập trình), không phải là lý do chính đáng, tôi biết, nhưng chúng làm phiền tâm lý tiềm thức của tôi theo cách thức dữ dội đến mức chúng buộc tôi phải loại bỏ nó:

  • Phải mất nhiều không gian lưu trữ hơn mức cần thiết
  • Trình phân tích cú pháp sẽ phải bỏ qua một ký tự phụ mà không có lý do chính đáng khi biên dịch
  • Một số trình chỉnh sửa có thể thêm một dòng trống bổ sung khi bật WordWrap và không gian dấu không phù hợp

Ừ ừ tôi biết! Tôi biết, đây là những lý do rác. Tôi không phải là người cầu toàn, nhưng ... có lẽ tôi là ai?

Lý do cuối cùng tôi có thể nghĩ đến là chuyển động con trỏ không nhất quán. Cảm giác như con trỏ đang lơ lửng trong không khí mỏng ở cuối dòng, mỗi bước bên phải có thể khiến nó rơi hoặc lơ lửng đến một mức độ không xác định, nó chỉ cảm thấy không ổn định (như những khối vô hình hoặc biến mất mà Super Mario đã từng nhảy lên).

Có lẽ tôi có thể được chẩn đoán với trailspacefobia?


Không phải lĩnh vực của tôi, nhưng nó có vẻ lạ đối với tôi ... bạn sử dụng loại hệ thống sắp chữ nào trong xuất bản trên máy tính để bàn, mặc định không bỏ qua dấu vết / nhiều khoảng trắng ? Tôi nghĩ rằng cách LaTeX và hầu hết các ngôn ngữ lập trình làm điều đó là tiêu chuẩn ở mọi nơi, ngoại trừ trong rác WYSIWYG ở cấp độ người tiêu dùng.
rẽ trái

Adobe InDesign (điều đó cũng thuộc loại rác WYSIWYG ở cấp độ người tiêu dùng phải không?). Nó sẽ bỏ qua các khoảng trắng ở cuối, vâng, nhưng thay thế tất cả các nguồn cấp dữ liệu bằng các khoảng trắng trong một đoạn và bạn sẽ kết thúc bằng các khoảng trắng kép (không bị bỏ qua), sau đó cần phải thay thế thêm để loại bỏ các khoảng trống đó.
Louis Somalia

"Xuất bản trên máy tính để bàn" không phải là thứ bạn làm với "hệ thống sắp chữ".
rakslice

22

Rất nhiều câu trả lời gần như chạm vào lý do nó không tốt cho tôi, nhưng về cơ bản: Nó "phá vỡ" các trình soạn thảo văn bản. Kinh nghiệm của tôi là với vim.

Vim được thiết kế sao cho các hành động phổ biến ánh xạ tới các chữ cái rõ ràng đến mức bạn thậm chí không phải suy nghĩ về việc kết hợp chữ cái hoặc phím nào. Các phím nóng khác nhau cho phép con trỏ nhảy xung quanh văn bản nhanh đến mức chỉ cần một vài lần nhấn phím để đưa nó đến bất cứ nơi nào bạn muốn. Ngay cả những thứ như khối mã gấp rất nhanh, vì bạn có thể nhấn END hoặc $ để nhảy đến cuối dòng, nơi con trỏ sẽ chồng lên {hoặc} hoặc (hoặc) hoặc thứ gì đó - không cần phải phá vỡ luồng suy nghĩ của bạn có một ý tưởng lên màn hình

Nhưng sau đó xuất hiện một số khoảng trắng kéo dài và chuyển động của con trỏ không còn có thể dự đoán được nữa. Quá trình gõ của bạn đang bị gián đoạn vì một cái gì đó bạn không thể nhìn thấy đang ảnh hưởng đến nơi con trỏ đi, do đó bạn phải phá vỡ dòng suy nghĩ của mình để gửi nó đến nơi cần đến.

Bạn có bao giờ nhận thấy mọi người khó chịu như thế nào khi họ thực sự tập trung vào một nhiệm vụ và ai đó làm gián đoạn họ không? Yeah, tìm kiếm dấu khoảng trắng khi nó dự kiến ít nhất là chính xác như thế.

Là một sidenote, tôi cũng nhận thấy rằng những người không quan tâm đến khoảng trắng dấu vết là những người sử dụng chuột để điều hướng và có xu hướng trở thành người đánh máy chậm hơn vì nó ...


2
Là một sidenote, tốc độ gõ không liên quan gì đến việc bạn có sử dụng chuột để điều hướng hay không. Một số điều hướng là hoàn toàn phù hợp cho một con chuột. ; p
Steven Jeuris

2
Nếu bạn sử dụng vim, bạn có thể nhanh chóng xóa tất cả khoảng trắng theo sau:%s/ *$//
Giorgio

1
@Giorgio Tôi biết, nhưng tôi không thể làm điều đó bất cứ lúc nào vì nó được tính là một sự thay đổi trong kiểm soát phiên bản
Izkata

@izkata: Đúng. Tôi định dạng lại các tệp tôi phải thay đổi trước khi kiểm tra chúng nhưng đây là một trận chiến bị mất nếu các nhà phát triển khác tiếp tục kiểm tra các tệp có khoảng trắng ở cuối.
Giorgio

17

Đáng ngạc nhiên, câu trả lời rõ ràng nhất là thiếu: khoảng trắng theo dõi có thể và sẽ tạo ra các lỗi khó tìm.

Tình huống rõ ràng nhất là chuỗi multiline. Python, JavaScript và Bash là một vài ví dụ về các ngôn ngữ có thể bị ảnh hưởng bởi điều này:

print("Hello\·
····World")

sản xuất:

  File "demo.py", line 1
    print("Hello\
                 ^
SyntaxError: EOL while scanning string literal

đó là một cách khó hiểu và khó giải quyết nếu trình soạn thảo không được cấu hình để hiển thị các ký tự khoảng trắng.

Mặc dù tô sáng cú pháp có thể giúp tránh các trường hợp như vậy, nhưng việc không gặp sự cố ở nơi đầu tiên thậm chí còn dễ dàng hơn bằng cách không để khoảng trắng ở cuối dòng. Đây là lý do tại sao một số trình kiểm tra kiểu sẽ đưa ra cảnh báo khi gặp khoảng trắng ở cuối và một số trình chỉnh sửa sẽ tự động cắt chúng.

nhập mô tả hình ảnh ở đây

Minh họa: tô sáng cú pháp có thể giúp tránh khoảng trắng theo sau trong các tình huống có thể dẫn đến lỗi, nhưng đừng chỉ dựa vào nó.

Một bối cảnh khác, được đề cập ngắn gọn trong một câu trả lời trước đó , là dữ liệu được lưu trữ trong các tệp.

Ví dụ: các tệp CSV chứa khoảng trắng theo dõi có thể gây ra sự không nhất quán dữ liệu cũng rất khó phát hiện: các trình phân tích cú pháp tuân thủ tiêu chuẩn sẽ cắt bớt khoảng trắng (tiêu chuẩn chỉ ra rằng khoảng trắng đầu hoặc cuối là không liên quan, trừ khi được phân cách bằng dấu ngoặc kép), nhưng trừ khi được phân tách bằng dấu ngoặc kép), nhưng một số trình phân tích cú pháp có thể hoạt động sai và giữ khoảng trắng là một phần của giá trị.

Các định dạng tùy chỉnh khác có thể xem xét cụ thể rằng khoảng trắng là một phần của giá trị, dẫn đến các tình huống nhất quán nhưng vẫn khó gỡ lỗi.


14

Gần đây tôi đã dành một ngày để tìm kiếm một lỗi hóa ra là một khoảng trắng bất ngờ kéo theo dữ liệu.


13
Tôi nghĩ đó một lỗi; mã xử lý đầu vào do con người tạo nên loại bỏ khoảng trắng theo sau và thường khoảng trắng hàng đầu cũng sẽ bị loại bỏ.
kevin cline

@kevincline - Ít nhất nên có. Nếu nó không hiển thị trên màn hình hoặc trên bản in, tôi không muốn nghĩ về nó.
Rook

6
Bởi vì bạn đã dành một ngày để tìm kiếm một lỗi, dấu vết trắng là một vấn đề lớn? Vui lòng chỉnh sửa câu trả lời của bạn để chung chung hơn thế. Thêm một số nền tảng, lập luận, ... Cá nhân tôi chưa bao giờ gặp vấn đề về khoảng trắng, nhưng tôi không sử dụng nó như một kết luận rằng chúng cũng không phải là vấn đề.
Steven Jeuris

2
@Steven Trailing whitespace gây ra một lỗi khó theo dõi. Có vẻ như một câu trả lời tốt cho tôi. Bạn có thể tưởng tượng làm thế nào một số mã phân tích dữ liệu có thể phá vỡ trong tình huống đó.
Will Sheppard

Tôi đã xóa khoảng trắng ở cuối dữ liệu và bây giờ thử nghiệm thất bại. Bạn chịu trách nhiệm cho điều đó. Bạn tên là gì? Tôi sẽ gửi hóa đơn ở đâu?
Thomas Weller

8

Khi tôi chọn mã nguồn chương trình để sao chép và dán nó (hoặc xóa nó), tôi thấy hơi khó chịu khi thấy tất cả khoảng trắng thừa bất thường ở cuối dòng: vì tôi phải đọc mã trong khi tôi đang chọn mã , khoảng trắng kéo dài là một tiếng ồn không cần thiết. Ví dụ (dấu chấm đại diện cho khoảng trắng):

if (fp)........
{....
    fclose(fp);.
}
else
{.....
    prinft("File is NULL\n");
}..

Ví dụ này là nhân tạo, nhưng tôi đã thấy rất nhiều mã trông như thế này.


7

Bên cạnh vấn đề rõ ràng là nó phá vỡ phân tích cú pháp trong một số trường hợp nhất định? Như một poster khác đã lưu ý rằng nó có thể gây ra lỗi tinh vi và khó theo dõi. Khoảng trắng không phải lúc nào cũng không đáng kể. Trong một số trường hợp, khoảng trắng theo dõi có thể thay đổi đáng kể ý nghĩa của một dòng mã hoặc dữ liệu.

Trong hầu hết các trường hợp, khoảng trắng là có định dạng mã cho người đọc. Khoảng trắng lưu trữ có thể chỉ ra một số điều bao gồm:

  • Một tuyên bố không đầy đủ;
  • Một bình luận còn thiếu;
  • Một chỉnh sửa sai; hoặc là
  • Chỉnh sửa cẩu thả.

Hai trong số này có thể dẫn đến kết quả sai, và một số khác có thể làm cho việc hiểu mã trở nên khó khăn hơn.


4

Có những ngôn ngữ lập trình nhạy cảm với khoảng trắng dòng cuối. Ví dụ: tập lệnh TCL sẽ báo lỗi nếu có khoảng trắng ở cuối dòng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.