2009-06-17 33 views
17

Một khía cạnh của javascript mà thật khó để tìm thông tin trên là thực hành vỏ. Bởi thực hành vỏ, tôi có nghĩa là những gì phong cách vỏ (tức là trường hợp lạc đà, pascal-case, vv) nên được sử dụng cho những yếu tố (Constructors, chức năng riêng tư, chức năng công cộng).Kiểu vỏ bọc thực hành tốt nhất cho javascript là gì? Tại sao?

Quy tắc duy nhất tôi đã nghe là từ bài giảng của Douglas Crockford trên nhà hát YUI, cho biết rằng các nhà xây dựng nên là các hàm duy nhất bắt đầu bằng chữ hoa.

Ngoài ra, dường như không có nhiều tiêu chuẩn vỏ mà mọi người theo dõi trong javascript.

Có ai biết bất kỳ thực hành tốt nhất nào cho javascript hay không và tại sao việc sử dụng chúng là hợp lý?

Bạn cũng theo dõi kiểu vỏ với tệp .js của mình?

Trả lời

31

Tôi thích PascalCase dành cho nhà xây dựng và camelCase cho mọi thứ khác. Đó là phong cách mà thư viện chuẩn JS sử dụng và tốt ... mọi khung công tác JS mà tôi đã thấy cho đến thời điểm này :)

Và tôi sử dụng quy ước đặt tên all_lowercase cho tất cả các tệp được phân phát từ web. Có một số hệ thống tệp không phân biệt chữ hoa chữ thường.

+3

Bạn chỉ có thể tưởng tượng nếu có một hệ điều hành hiện đại không phân biệt chữ hoa chữ thường xD Làm thế nào ngu ngốc sẽ là _that_! – theonlygusti

1

Tôi thích camelCase cho mọi thứ ngoại trừ nhà thầu. Lý do (và tôi tin rằng đây là lý do tại sao ông Crockford cũng đề xuất điều này) bởi vì trong các ngôn ngữ khác, chẳng hạn như Java, quy ước là tận dụng các lớp học của bạn, đó là những gì các nhà thầu được sử dụng.

Đó là $ 0,02 của tôi.

14

Ngôn ngữ chính sử dụng InitialCaps cho các hàm tạo (ví dụ: Đối tượng, Ngày, Số, RegExp) và camelCase cho các phương thức và thuộc tính (ví dụ: something.toString(), quantity.valueOf(), regexp.ignoreCase). Quy ước này cũng được tuân thủ trong các đặc tả và triển khai DOM (ví dụ: HTMLElement.setAttribute()). Vì vậy, nó làm cho ý nghĩa nhất để áp dụng các quy ước giống nhau, hoặc bạn kết thúc với một mớ hỗn độn khủng khiếp của các phong cách như:

var number_of_fish_requested = document.getElementById("fish").value; 
var fish_count = parseInt(number_of_fish_requested, 10); 

mà chỉ trở nên hoàn toàn khó hiểu, không chỉ để gõ nhưng quan trọng hơn là, để đọc.

(. Bạn dành nhiều thời gian đọc mã, cố gắng để gỡ lỗi hoặc sửa đổi nó, hơn bao giờ bạn làm viết nó ở nơi đầu tiên)

+1

Cảm ơn lời giải thích tuyệt vời! –

0

Tất cả các chữ thường có dải phân cách gạch dưới là dễ nhất để đọc; nó theo ngôn ngữ tự nhiên. "Tốt nhất" sẽ đưa bạn vào một cuộc chiến thánh thiện; thực tế là trường hợp không quan trọng nhiều như các vấn đề thiết kế khác nhưng đó là một chủ đề dễ dàng để phân cực.

ALongButNotReallyReadableIdentifier 
an_even_longer_but_completely_readable_identifier 
+2

Nhưng 'dễ nhất' không đặc biệt tránh bất kỳ cuộc chiến tranh thánh thiện nào. * I * nói Pascal và trường hợp lạc đà là * dễ dàng hơn * để đọc hơn gạch dưới, mà * bạn * nói là 'dễ nhất'. Bây giờ ai là đúng? – AakashM

+2

Bạn nói đúng là không có cách nào để tôi chứng minh rằng "sai". Hầu hết những người nghiên cứu cách bộ não phân chia văn xuôi tiếng Anh quan sát thấy bộ não sẽ phân chia một câu thành các từ được phân cách bằng dấu cách. Bộ não sau đó sẽ thực hiện nhận dạng mẫu trên các chữ cái đầu tiên và cuối cùng của mỗi từ, độ dài gần đúng của từ đó và áp dụng ngữ cảnh để thu được ngữ nghĩa. Đúng là người ta có thể tự dạy mình đọc một kịch bản kiểu khác nhưng sẽ phải có lý do chính đáng để chuyển từ tiếng Anh chuẩn. – clemahieu

+0

Ví dụ của bạn thú vị. AnEvenLongerButCompletelyReadableIdentifier hoạt động OK, bởi vì bạn không có 2 thủ đô nhưng lại chống lại nhau ngay từ đầu. –

-1

Câu trả lời được chấp nhận là đúng nhưng có một số ngoại lệ. Trong cửa sổ.JSON và cửa sổ.XMLHttpRequest thuật ngữ được viết hoa.

Ngoài ra, hầu hết mọi người sử dụng PascalCase cho các đối tượng loại enum trong Javascript và các giá trị viết hoa bên trong. Đôi khi các không gian tên cũng được thực hiện trong PascalCase.

dụ: MyCompany.Web.UI.MyComponent.ThemeOption = {BLACK: 0, SILVER: 1, BLUE: 2}

+0

XML và JSON là viết tắt. – HerrSerker

2

Những gì tôi đã thấy cho đến nay là một sự đa dạng rất lớn của các tiêu chuẩn vỏ.

Theo như tôi quan tâm, tôi sử dụng kiểu dáng C# để viết mã JavaScript của mình. Vì vậy, tôi sử dụng PascalCase cho tên lớp, phương thức công khai, thuộc tính và tất cả biến toàn cục và camelCase cho đối số, biến cục bộ và hàm riêng. Điều này bằng cách nào đó phản ánh môi trường chung của tôi, giúp phân biệt các phạm vi biến. Tôi cũng có xu hướng giữ các hàm lớp của mình trong một tệp riêng biệt có cùng tên với ClassName của tôi (ClassName.js, ClassName.min.js).

Đây là về cách tiếp cận của tôi.

Tôi cũng nhận thấy rằng các lập trình viên Java, tuân theo các quy tắc Java (và kiểu viết giống với ngôn ngữ Java). Các lập trình viên Ruby on Rails theo các tiêu chuẩn đặt tên riêng của chúng như underscore_separated_var_name. Hơn nữa, như bạn đã đề cập, có khuynh hướng sử dụng pascalCase rất nhiều trong việc đặt tên trong các khung công tác rất phổ biến mà tác giả đến từ các cộng đồng khác nhau như Linux/cộng đồng nguồn mở và các nhà phát triển Microsoft (jQuery, knockout.js, JSJaC, v.v.) .)

Tôi nên lưu ý rằng không có phương pháp nào trong số này sai hoặc đúng, khi nói đến JS. Mục đích chính của quy ước đặt tên và cấu trúc tệp của bạn là khả năng đọc. Nếu bạn nhất quán thì bạn trong tương lai và các nhà phát triển đồng nghiệp của bạn sẽ nhanh chóng hiểu và tiếp tục với mã của bạn.

Các vấn đề liên quan