Tại sao sự thay đổi gần đây để loại bỏ / bỏ dấu chấm phẩy khỏi Javascript?


80

Nó dường như là thời trang gần đây để bỏ qua dấu chấm phẩy từ Javascript. Có một bài đăng trên blog vài năm trước nhấn mạnh rằng trong Javascript, dấu chấm phẩy là tùy chọn và ý chính của bài đăng dường như là bạn không nên bận tâm với chúng vì chúng không cần thiết. Bài đăng, được trích dẫn rộng rãi, không đưa ra bất kỳ lý do thuyết phục nào để không sử dụng chúng, chỉ là việc để chúng ra ngoài có ít tác dụng phụ.

Ngay cả GitHub cũng đã nhảy vào nhóm không có dấu chấm phẩy, yêu cầu bỏ qua bất kỳ mã nào được phát triển nội bộ và một cam kết gần đây đối với dự án zepto.js bởi nhà bảo trì của nó đã loại bỏ tất cả dấu chấm phẩy khỏi cơ sở mã. Những lời biện minh chính của ông là:

  • đó là vấn đề ưu tiên cho đội của anh ấy;
  • ít gõ

Có những lý do tốt khác để bỏ chúng?

Thành thật mà nói tôi có thể thấy không có lý do gì để bỏ qua chúng, và chắc chắn không có lý do gì để quay lại mã để xóa chúng. Nó cũng đi ngược lại ( năm ) thực hành được khuyến nghị , mà tôi không thực sự mua đối số "sùng bái hàng hóa" cho. Vì vậy, tại sao tất cả các dấu chấm phẩy gần đây? Có một sự thiếu hụt lờ mờ? Hay đây chỉ là mốt Javascript mới nhất?


2
"Năm thực hành được đề xuất" đề cập đến một câu hỏi về thẻ thăm dò SO được liệt trong danh sách đen mà không có khả năng khiến nó có thẩm quyền để hỗ trợ bất kỳ loại ý kiến ​​nào
gnat

24
@gnat chỉ vì mọi người ghét câu hỏi trên SO không làm cho nó trở thành một nguồn ý kiến ​​ít người hợp lệ hơn.
Ryathal

3
@gnat Các câu hỏi "chính thức được coi là không phù hợp trên StackOverflow" đôi khi được cộng đồng chuyên gia xem là rất có thẩm quyền. Đáng buồn nhưng là sự thật.
MarkJ

4
@gnat Câu hỏi trong danh sách đen thực sự có một số ví dụ rất thú vị về lý do tại sao bỏ qua ;có thể phá vỡ mã của bạn. Vì vậy, tôi muốn nói rằng đó là một tài liệu tham khảo hữu ích cho câu hỏi này.
Andres F.

1
Điều này có thể liên quan đến sự nổi bật ngày càng tăng của hipster vào đầu những năm 2010.
Alex

Câu trả lời:


62

Tôi cho rằng lý do của tôi là tồi tệ nhất: Tôi lập trình quá nhiều ngôn ngữ khác nhau cùng một lúc (Java, Javascript, PHP) - yêu cầu ';' vì vậy thay vì huấn luyện ngón tay và mắt của tôi rằng ';' không cần thiết cho javascript, tôi chỉ luôn thêm ';'

Lý do khác là tài liệu: bằng cách thêm ';' Tôi tuyên bố rõ ràng với chính mình, nơi tôi mong muốn tuyên bố kết thúc. Sau đó, một lần nữa tôi cũng sử dụng {}.

Đối số toàn bộ byte tôi thấy khó chịu và vô nghĩa:

1) cho các thư viện phổ biến như jquery: sử dụng google CDN và thư viện có thể sẽ nằm trong bộ đệm của trình duyệt

2) phiên bản các thư viện của riêng bạn và đặt chúng vào bộ nhớ cache mãi mãi.

3) gzip và giảm thiểu nếu thực sự, thực sự cần thiết.

Nhưng thực sự có bao nhiêu trang web có tốc độ lớn nhất của họ làm tắc nghẽn tốc độ tải xuống của javascript của họ? Nếu bạn làm việc cho một trang web hàng đầu 100 như twitter, google, yahoo, v.v. có thể. Phần còn lại của chúng ta chỉ nên lo lắng về chất lượng mã không phải dấu chấm phẩy chiến tranh tôn giáo.


3
Tôi đoán điều ngược lại cũng có thể đúng. Khi python trở nên phổ biến hơn cho web, việc JS của bạn giống với python dễ dàng hơn.
Ben DeMott

4
Hãy thử nhưng sau đó các chiến binh byte tương tự sẽ theo tôi về khoảng trắng không cần thiết ở đầu dòng. (Tôi cũng sẽ gặp lỗi Javascript vì tôi sẽ dựa vào quy tắc thụt lề của Python thay vì sử dụng {}
Pat

6
Nếu việc giảm số lượng byte là quan trọng, bạn sẽ có một cái gì đó thu nhỏ các tệp càng nhiều càng tốt. Nếu nó không đáng để sử dụng một bộ giảm thiểu, thì nó không đáng lo ngại về việc loại bỏ ';' để tiết kiệm số lượng byte.
Lawtonfogle

3
Số byte thực sự không nhất thiết phải giảm, trong thực tế, nó thực sự có thể được tăng lên vì một dòng mới thường (không phải luôn luôn) thực sự là hai ký tự (dòng mới theo sau là vận chuyển trở lại) vì vậy ở dạng hiệu quả nhất về không gian của nó dòng sẽ có một ký tự giống như dấu chấm phẩy một ký tự (nếu bạn nén tất cả mã JS của mình trong một dòng thường được thực hiện cho mã JS được triển khai, không phải mã nguồn phát triển).
ALXGTV

Con người cần thụt để hiểu lồng nhau sâu, đòi hỏi nhiều byte hơn dấu chấm phẩy. Mặc dù vậy, dấu chấm phẩy đang làm mất tập trung chất thải của phím nhấn.
Cees Timmerman

39

Nó làm cho phương thức xích dễ dàng hơn và cam kết sạch hơn

Vì vậy, hãy nói rằng tôi đang jQuerying và tôi có

$('some fancy selector')
  .addClass()
  .attr();

Nếu tôi muốn thêm công cụ và giữ cho cam kết dựa trên dòng của tôi nhỏ , tôi phải thêm nó ở trên attr. Vì vậy, đó là một suy nghĩ dài hơn chỉ là "thêm vào cuối". Và ai muốn nghĩ? =)

$('some fancy selector')
  .addClass()
  // new method calls must go here
  .attr();

Nhưng, khi tôi bỏ dấu chấm phẩy, tôi chỉ có thể nối và gọi nó là một ngày

  $('some fancy selector')
    .addClass()
    .attr()
+   .animate()
+   .click()

Ngoài ra, nếu tôi quyết định bật ra phương thức cuối cùng, tôi không phải gán lại dấu chấm phẩy và làm ô nhiễm lại cam kết của mình.

  $('some fancy selector')
    .addClass()
    .attr()
    .animate()
-   .click()

So với uggo

  $('some fancy selector')
    .addClass()
    .attr()
+   .animate();
-   .animate()
-   .click();

37
Đây là trường hợp sử dụng thích hợp IMO.
JBRWilkinson

9
Nhưng tuy nhiên thú vị.
Jonathan

8
Bạn có thể có dấu chấm phẩy ở cuối trên một dòng mới thụt vào làm dòng bắt đầu. Sau đó, bạn sao chép và sắp xếp lại mọi thứ theo ý muốn. Điều này cũng đóng chuỗi độc đáo.
Nux

11
Có phải chỉ có tôi là người tự hỏi tại sao bất cứ ai cũng quan tâm sự khác biệt của cam kết của họ trông như thế nào? như một quy tắc chung, mọi người đọc mã, không khác biệt.
Jules

11
@Jules, dọn dẹp khác biệt có nghĩa là hợp nhất có nhiều khả năng thành công.
joeytwiddle

22

dấu chấm phẩy trong JavaScript là tùy chọn

Lý do cá nhân của tôi không sử dụng dấu hai chấm là OCD.

Khi tôi sử dụng dấu hai chấm, tôi quên 2% trong số chúng và phải liên tục kiểm tra / thêm chúng trở lại.

Khi tôi không sử dụng dấu hai chấm, tôi không bao giờ vô tình đặt nó vào vì vậy tôi không bao giờ phải kiểm tra / loại bỏ chúng.


3
Tốt một. Tôi đã bị đốt cháy bởi một hoặc hai dòng không có dấu chấm phẩy trong một tệp được bán đúng cách.
Jonathan

3
Có các trình phân tích cú pháp (ví dụ GeSHi) sẽ không phân tích chính xác mã của bạn nếu không có dấu chấm phẩy. Bạn có thể nói rằng con người sẽ không phạm phải những sai lầm như vậy ... Nhưng nghiêm túc - sự kiện nếu tất cả nhóm của bạn sẽ cố gắng ghi nhớ dấu chấm phẩy cần đặt ở đâu, bạn có thực sự nghĩ rằng họ sẽ nhớ nó nếu không có cà phê buổi sáng? Và họ sẽ viết mã trong nhiều trạng thái của tâm trí. Hãy chắc chắn về nó.
Nux

16

Gần đây tôi đã viết một trình phân tích cú pháp / phân tích cho JavaScript, nơi tôi phải thực hiện ASI một cách siêng năng và tôi cũng có bản sao JavaScript của Crockford : Các bộ phận tốt trên giá sách của tôi, chủ trương luôn sử dụng dấu chấm phẩy. Ý định là tốt, nhưng nó không luôn luôn giúp đỡ trong thực tế.

Rõ ràng, những người viết các khung như jQuery, zepto, v.v. là những bậc thầy cú pháp JavaScript và do đó họ biết sự khác biệt giữa:

return
{
    status: true
};

return {
    status: true
};

JavaScript, trong khi mạnh mẽ, cũng là ngôn ngữ của người mới bắt đầu và chúc may mắn giải thích điều này cho một người chỉ đang học forvòng lặp là gì. Giống như giới thiệu cho hầu hết mọi người một kỹ năng mới, có một số điều phức tạp hơn mà bạn không muốn giải thích ngay lập tức, vì vậy thay vào đó bạn chọn thấm nhuần niềm tin "sùng bái hàng hóa" vào những thứ nhất định chỉ để đưa chúng lên khỏi mặt đất. Vì vậy, bạn có hai lựa chọn khi dạy người mới bắt đầu cách viết JavaScript:

  1. Nói với họ "tuân theo quy tắc này và đừng hỏi tại sao", bảo họ đặt dấu chấm phẩy luôn ở cuối mỗi dòng. Thật không may, điều này không giúp ích gì trong ví dụ ở trên, hoặc bất kỳ ví dụ nào khác mà ASI cản trở. Và ông hoặc bà lập trình viên mới bắt đầu bối rối khi đoạn mã trên không thành công.
  2. Nói với họ "tuân theo hai quy tắc này và đừng hỏi tại sao", bảo họ đừng bận tâm đến dấu chấm phẩy ở cuối mỗi dòng và thay vào đó luôn luôn a) Thực hiện theo returna {và b) Khi một dòng bắt đầu bằng một (, hãy thêm vào nó với một ;.

Chọn tùy chọn 2 là một bộ quy tắc "tôn sùng hàng hóa" tốt hơn để tuân theo (sẽ dẫn đến rất ít lỗi liên quan đến ASI) và ngay cả khi bạn hiểu sâu về chủ đề này, bạn sẽ có ít ký tự không cần thiết hơn trên màn hình.


8
Được rồi, tôi sẽ cắn. Giúp tôi hiểu sự khác biệt về cú pháp giữa hai ví dụ trên. Mắt chưa được huấn luyện của tôi chỉ nhìn thấy một sự khác biệt trong định dạng.
Jesse C. Choper

9
Hoặc, mặt khác, tôi tình cờ thấy câu trả lời do tai nạn tuyệt đối. Trong ví dụ đầu tiên, câu lệnh returnđược coi là một tuyên bố đơn độc và kết thúc dòng tương đương với dấu chấm phẩy. Ví dụ thứ hai thực sự trả về đối tượng. Thủ đoạn.
Jesse C. Choper

9
Tôi không nghĩ rằng tôi có thể đồng ý với ý kiến ​​cho rằng JavaScript là ngôn ngữ mới bắt đầu, có vô số mâu thuẫn và hiệu ứng bất ngờ trong JavaScript không có giải thích đơn giản. IMO một ngôn ngữ mới bắt đầu sẽ không như vậy, tôi sẽ gọi JavaScript là ngôn ngữ trung gian.
Ryathal

2
@Ryathal Tôi hiểu những gì bạn đang có, nhưng gọi nó là ngôn ngữ trung gian khiến tôi tự hỏi ngôn ngữ nào nó hòa giải. Bạn phát ra âm thanh như thể đó là một bước trên hành trình đến một thứ khác chứ không phải là đích đến theo đúng nghĩa của nó.
Rạch

9
Điểm làm rõ: returnví dụ thực sự là một ngoại lệ đối với hành vi JS bình thường, đó là cố gắng kéo các dòng lại với nhau khi một dấu chấm phẩy bị bỏ qua. return, breakcontinuetất cả đều thể hiện hành vi đặc biệt này trong đó một dòng mới luôn được hiểu là phần cuối của tuyên bố. (Nguồn là "JavaScript: Hướng dẫn dứt khoát" của Flanagan, trang 25-26). Cá nhân, tôi cố gắng cho ý tưởng "mã ít bất ngờ nhất". Rời khỏi dấu chấm phẩy có xu hướng dẫn đến nhiều bất ngờ hơn bất cứ điều gì (tôi thường cũng giữ niềng răng xoăn của mình ngay cả đối với các tuyên bố đơn giản).
Kyle

16

Không có gì gọi là quá tải thông tin, chỉ có thiết kế xấu.

- Edward Tufte

Đó là một quy tắc chung trong thiết kế đồ họa để loại bỏ các yếu tố và trang trí không cần thiết để giảm tiếng ồn.

Ít yếu tố hình ảnh hơn trên màn hình có nghĩa là bộ não của chúng ta ít hoạt động hơn để phân tích thông tin hữu ích thực tế.

let foo = 1

so với

let /* variable */ foo = 1; // EOL

Một ví dụ phóng đại tất nhiên, nhưng nó minh họa nguyên tắc chung: Các yếu tố hình ảnh bổ sung nên được thêm vào khi và chỉ khi chúng phục vụ một mục đích. Vì vậy, làm dấu chấm phẩy phục vụ một mục đích?

Những lý do lịch sử để sử dụng dấu chấm phẩy trong JavaScript là:

  • Duy trì sự tương tự với C / Java
  • Tránh các vấn đề tương thích với các trình duyệt và công cụ viết kém
  • Giúp con người và máy móc phát hiện lỗi mã
  • Tự động chèn dấu chấm phẩy mang một hình phạt hiệu suất

Các vấn đề tương thích gần như không phải là vấn đề ngày nay. Xơ nhung tách từ hiện đại có thể phát hiện bất kỳ lỗi mã cũng giống như cũng không có dấu chấm phẩy. Sự tương đồng với C / Java / PHP vẫn có thể là một sự cân nhắc (xem câu trả lời được chấp nhận bởi Pat), nhưng chỉ vì các ngôn ngữ khác chứa các thành phần cú pháp thừa không có nghĩa là chúng ta nên giữ chúng trong JavaScript, đặc biệt là vì nhiều ngôn ngữ khác (Coffeescript, Python, Ruby, Scala, Lua) không yêu cầu chúng.

Tôi đã làm một bài kiểm tra nhanh để xem có bị phạt hiệu suất trong V8 không. Đây là Io.js phân tích tệp JavaScript 41 MB (được lặp lại 100 lần) bằng dấu chấm phẩy và sau đó xóa dấu chấm phẩy:

$ time node lodashx100.js
node lodashx100.js  2.34s user 1.30s system 99% cpu 3.664 total
$ time node lodashx100s.js
node lodashx100s.js  2.34s user 1.15s system 99% cpu 3.521 total

Mọi người phải quyết định phong cách mã hóa ưa thích của riêng họ cho các dự án của họ, nhưng tôi không còn thấy bất kỳ lợi ích hữu hình nào khi sử dụng dấu chấm phẩy, vì vậy để giảm nhiễu hình ảnh, tôi đã dừng lại.


Tôi sẽ phản bác lập luận này về việc loại bỏ các yếu tố không cần thiết trong tải mà tâm trí bây giờ phải làm để thêm lại vào cú pháp tùy chọn. Bây giờ dấu chấm phẩy không phải là một căng thẳng tinh thần lớn nếu bị bỏ qua. Đây là một vấn đề tôi đã gặp phải với Ruby và Scala. Khi nó trở thành một chuỗi các cuộc gọi với các cuộc gọi bên trong các cuộc gọi và tất cả chúng đều bị bỏ qua mọi paren, đó là một gánh nặng phải tách ra.
Seamus

8

Chọn một quy ước lập trình có hiệu quả tương tự như chọn tập hợp con của ngôn ngữ đích. Tất cả chúng ta làm điều này vì những lý do thông thường: khả năng đọc mã, khả năng bảo trì, tính ổn định, tính di động, v.v. - trong khi có khả năng hy sinh tính linh hoạt. Những lý do này là lý do kinh doanh thực sự.

Các lý do như "tiết kiệm tổ hợp phím" và "lập trình viên nên học các quy tắc JavaScript" là những lý do kinh doanh cận biên để chúng mang ít trọng lượng thực tế.

Trong trường hợp của tôi, tôi cần phải tăng tốc JavaScript rất nhanh, vì vậy việc tận dụng một tập hợp con giới hạn của ngôn ngữ là lợi thế của tôi. Vì vậy, tôi đã chọn tập hợp con JavaScript của JavaScript, bật ứng dụng Rockstar JSLinter trong Eclipse sang các cài đặt hạn chế nhất mà tôi có thể chịu được và không nhìn lại.

Tôi rất biết ơn vì có thể tránh các chi tiết về sự khác biệt giữa "==" và "===" hoặc chi tiết về dấu chấm phẩy, bởi vì tôi đã có một danh sách nhiệm vụ cao cả dặm và những chi tiết đó sẽ không giúp hoàn thành những công việc đó sớm hơn một giây.

Tất nhiên, điều quan trọng nhất về một quy ước là tính nhất quán và nghĩ về nó như một tập hợp ngôn ngữ giúp củng cố mệnh lệnh này. Và mặc dù điều này có thể không giúp trả lời câu hỏi của OP, tôi nghĩ nó có thể giúp với việc đóng khung thực tế của nó.


5

Một câu hỏi cũ, tuy nhiên tôi ngạc nhiên không ai nhắc đến:

Thu nhỏ: Nếu bạn tình cờ thu nhỏ đoạn mã JavaScript không kết thúc rõ ràng các câu lệnh bằng ký tự dấu hai chấm, bạn có thể sẽ gặp khó khăn khi cố gắng tìm ra điều gì sai với đoạn trích chỉ hoạt động trước khi rút gọn và bây giờ không hoạt động.

Sự mơ hồ: Semi-colons là tùy chọn, đúng, tuy nhiên bằng cách loại bỏ chúng khỏi mã nguồn, bạn có thể để lại một số tình huống mơ hồ cho trình phân tích cú pháp để tự quyết định. Nếu bạn đang viết 100 dòng mã cho một cửa hàng trực tuyến, vâng, có thể điều đó không thành vấn đề, nhưng các nhiệm vụ nghiêm trọng hơn sẽ đòi hỏi sự rõ ràng 100%.

Cách đây rất lâu, tôi đã đọc một sự tương tự rất hay về một điều khác nhưng cũng rất đúng trong trường hợp này: (Trong trường hợp của chúng tôi) Loại bỏ các dấu chấm phẩy giống như vượt đèn đỏ. Cuối cùng bạn có thể ổn hoặc bạn có thể bị xe tải đâm.

Tại sao ngày nay nó trở nên phổ biến hơn?

Cá nhân tôi tin rằng việc chạy JavaScript ở phía máy chủ có rất nhiều hiệu ứng đối với chính cộng đồng JavaScript. Trong trường hợp của chúng tôi, rõ ràng không ai sẽ giảm thiểu JavaScript ở phía máy chủ (vì mã nguồn không được gửi đến trình duyệt web của khách hàng), do đó, không có dấu chấm phẩy có vẻ an toàn hơn nhiều, điều đó đúng; tuy nhiên, các nhà phát triển khác học từ những cuốn sách, bài viết và video này, họ không may bỏ qua thực tế là JavaScript ở phía máy chủ không hoàn toàn giống với JavaScript ở phía máy khách.


Công cụ khai thác có thể để lại trong dòng mới một ký tự hoặc chèn dấu chấm phẩy khi dấu chấm phẩy không xuất hiện mà không bị phạt kích thước. Tôi không biết công cụ khai thác nào (nếu có) làm điều này. Nguy hiểm vẫn còn tồn tại ở ít nhất một số trong số họ, vì vậy quan điểm của bạn vẫn còn trong thực tế.
outis

3

Có những lý do tốt để giữ chúng trong.

Chúng không thực sự là tùy chọn, JS có thể thêm chúng trở lại bằng cách chèn dấu chấm phẩy tự động khi chúng bị thiếu nhưng đó không phải là điều tương tự.

JavaScript của Douglas Crockford: Các bộ phận tốt nói trong hai dịp riêng biệt rằng đó là một ý tưởng tồi. Việc chèn dấu chấm phẩy tự động có thể ẩn các lỗi trong chương trình của bạn và tạo sự mơ hồ.

JSLint không chấp thuận.


3

JavaScript không cần dấu chấm phẩy để chấm dứt các báo cáo trong hơn một thập kỷ. Đó là bởi vì các ký tự dòng mới được coi là dấu kết thúc câu lệnh (tôi tin rằng điều này cũng được đề cập trong thông số kỹ thuật ECMAScript sớm). Nó thực sự rất có ý nghĩa, đặc biệt là vì thực sự không có lý do chính đáng nào [mà tôi biết] tại sao JavaScript lại cần sử dụng thường xuyên các dấu chấm phẩy mà không phải là các ngôn ngữ khai báo được giải thích khác như Ruby hoặc Python.

Yêu cầu dấu chấm phẩy có thể giúp viết trình phân tích cú pháp cho ngôn ngữ dễ dàng hơn, nhưng nếu mọi trình thông dịch ngoài đó hỗ trợ cho việc bỏ dấu chấm phẩy thì chính xác thì vấn đề là gì?

Những gì nó nói đến là một lập trình viên có kiến ​​thức như thế nào: nếu bạn biết rằng bạn có thể bỏ qua dấu chấm phẩy, hãy thoải mái hiểu rằng có thể có hoặc không có hậu quả. Con người là cỗ máy ra quyết định và gần như tất cả các quyết định đòi hỏi một số thỏa hiệp hoặc đánh đổi. Sự đánh đổi để chỉ ném các dấu chấm phẩy xung quanh mã của bạn (ngay cả ở những nơi không cần thiết) là mã của bạn trở nên ít đọc hơn (tùy thuộc vào người bạn hỏi) và JSLint sẽ không phàn nàn (ai quan tâm ). Mặt khác, sự đánh đổi để bỏ qua các dấu chấm phẩy là thực tế là 90% lập trình viên JavaScript sẽ trừng phạt bạn vì điều đó, nhưng cuối cùng bạn có thể thích viết JavaScript hơn vì nó.

Điều gì nghe tốt hơn cho bạn; đưa ra quyết định sáng suốt hoặc đưa ra quyết định mù quáng / tâm lý bầy đàn?


Tôi muốn biết lý do tại sao điều này đã nhận được downvote. JavaScript không cần dấu chấm phẩy để chấm dứt các câu lệnh; nó chắc chắn có thể sử dụng chúng, nhưng chúng không có nghĩa là một yêu cầu. Nếu chúng là cần thiết, thì không ai giải thích được. Thực tế (vâng, một thực tế) rằng bạn có thể viết toàn bộ ứng dụng JavaScript mà không có dấu chấm phẩy nào chứng minh điều này. Ngoài ra, tôi không thấy cách hiểu một công cụ hoạt động và sử dụng lý lẽ của chính mình để đưa ra quyết định bằng cách nào đó trái ngược với "chỉ cần làm điều đó". Đó là những gì được gọi là tôn giáo.
Ravenstine

Tôi đã không downvote, nhưng vấn đề có thể là điều này thực tế không đúng như văn bản. Dòng mới không được coi là dấu chấm dứt câu lệnh trong javascript. Bạn có thể bỏ dấu chấm phẩy vì một tính năng được gọi là chèn dấu chấm phẩy tự động cho phép nó tự động sửa lỗi phân tích cú pháp trong một số trường hợp. Những người ủng hộ dấu chấm phẩy cho rằng nhiều lập trình viên javascript dường như hiểu rất kém quy tắc này. Bài viết của bạn dường như là một cuộc tranh luận có lợi cho họ trong ánh sáng đó. (Công bằng mà nói, tôi hầu hết đồng ý với luận điểm của bạn, nhưng vì những lý do khác nhau)
Tim Seguine

@TimSeguine Vâng, tôi đã viết lại điều này trước khi tôi hiểu rõ hơn. Tôi vẫn không nghĩ rằng thật sai lầm khi không sử dụng dấu chấm phẩy miễn là những người làm như vậy hiểu chính xác những gì họ đang làm. Tôi nên làm lại bài đăng của mình, hoặc có lẽ loại bỏ nó vì đủ những người khác đã theo đuổi về điều này. Cảm ơn những lời chỉ trích lịch sự! :)
Ravenstine

2

Tôi có hai lý thuyết:

A)

Vấn đề của sự lựa chọn này là vào thời trước, khi áp dụng JSLint, v.v., bạn đã chọn dành một lượng lớn thời gian để bắt lỗi cú pháp tối nghĩa hoặc một khoảng thời gian hợp lý để thực thi chính sách tiêu chuẩn về mã.

Tuy nhiên, khi chúng tôi di chuyển nhiều hơn về mã đơn vị thử nghiệm đơn vị và tích hợp liên tục, lượng thời gian (và tương tác của con người) cần thiết để bắt lỗi cú pháp đã giảm ồ ạt. Phản hồi từ các thử nghiệm sẽ nhanh chóng cho biết liệu mã của bạn có hoạt động như mong đợi hay không, trước khi nó đến gần người dùng cuối, vậy tại sao lại lãng phí thời gian để thêm độ dài tùy chọn?

B)

Lập trình viên lười biếng sẽ làm bất cứ điều gì để làm cho cuộc sống của họ dễ dàng hơn trong thời gian ngắn. Ít gõ -> ít nỗ lực hơn -> dễ dàng hơn. (ngoài ra, không phải dấu chấm phẩy sẽ tránh làm căng ngón tay đeo nhẫn tay phải của bạn, tránh một số chỉ số RSI).

(NB Tôi không đồng ý với ý tưởng bỏ qua một cái gì đó làm sai lệch một tuyên bố).


1
jshint vẫn là một công cụ quan trọng.
Raynos

Đối với việc định hướng một tuyên bố, cả hai \n;\nđều giống nhau
Raynos

2
@Raynos Trên thực tế, tôi đã thấy rằng JSLint có xu hướng hơi vô dụng với sự phức tạp của một số mã nặng khung mà tôi thường làm việc. Ngoài ra, \ n và \ n không giống nhau trong mọi trường hợp , nếu không, sẽ không bao giờ có nhu cầu cho;
Ed James

7
jslint là vô dụng, tuy nhiên jshint là một công cụ khác.
Raynos

0

Tôi không bỏ chúng, nhưng tôi thay đổi quy tắc khi chèn chúng.

Các quy tắc hầu hết mọi người sử dụng là

  • Trước mỗi dòng kết thúc
  • Ngoại trừ dòng kết thúc với một }đến từ một tuyên bố chức năng
  • Nhưng chỉ là một câu lệnh hàm, không gán cho một hàm theo nghĩa đen

Quy tắc của tôi là: Ở đầu mỗi dòng đơn bắt đầu bằng một dấu ngoặc / khung mở.

Của tôi đơn giản hơn, do đó dễ theo dõi hơn và ít bị lỗi hơn. Ngoài ra số lượng dấu chấm phẩy thấp giúp bạn dễ dàng tìm thấy các lỗi được tạo ra bằng cách loại bỏ nó.


Một lập luận khác là return\nvaluelỗi khét tiếng đến từ việc không biết về ASI. Quy tắc của tôi buộc bạn phải biết về ASI, vì vậy những người sử dụng quy tắc của tôi ít có khả năng rơi vào cái bẫy của lỗi đó.


0

Số byte. Bạn thấy đấy, những người độc hại thường cố gắng khớp thật nhiều vào một dòng mã. Về mặt kỹ thuật, điều này sẽ không thể thực hiện được nếu không có dấu chấm phẩy. Giả định của tôi là nó là một biện pháp bảo mật hơn là một yêu cầu lập trình. Bằng cách nào đó, điều này sẽ làm giảm đáng kể XSS khi nó trở thành một yêu cầu thay vì một gợi ý.

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.