Tại sao các lập trình viên Java thích đặt tên một biến là clazz tinh vi? [đóng cửa]


156

Tôi đã thấy rất nhiều mã có khai báo như thế Class clazznày, nguồn gốc này bắt nguồn từ đâu? Đây có phải là một số loại quy ước? Tôi nghĩ rằng 'clazz' thậm chí không phải là một từ tiếng Anh, không có nghĩa gì cả, làm thế nào nhiều lập trình viên có thể đặt tên sai một cách trùng hợp?


36
đừng quên klass!
Peter Recore

24
@Peter: điểm tốt, đó là một klassic.
Tổng thống James K. Polk

13
Aleksey Shipilev đã đề xuất sử dụng сlassđánh vần với Cyrillic сnhư một cách thay thế.
Stuart Marks

12
@StuartMarks Tôi đang từ chối đề xuất đó. Không có gì.
Goran Vasic

16
Ở Anh, chúng tôi thường sử dụng 'Clarse'.
John Gowers

Câu trả lời:


173

clazzđã được sử dụng trong Java thay cho từ "class" dành riêng kể từ JDK 1.0. "Class" là những gì bạn muốn, nhưng viết tắt hoặc chèn rác ("a", "the", "_", v.v.) làm giảm sự rõ ràng. clazzchỉ nói lớp. Những người nói tiếng Anh "quốc tế" (những người đọc cả tiếng Anh và tiếng Anh Mỹ) được sử dụng để hoán đổi 's' và 'z'.

Vì Java đã tiết lộ nguồn và một nền văn hóa phù hợp ngay từ đầu, mã Java và hướng dẫn đáng giá nhận các quy ước tương tự. Đó là một trong những điều tuyệt vời về hệ sinh thái Java, mà tôi nghĩ là một phần quan trọng trong thành công của nó.


82
Thật khó để đồng ý rằng "clazz" rõ ràng hơn "_ class" hoặc "myClass". Nếu tôi thấy mã "_group" trong mã, ý định sẽ rõ ràng hơn là một từ không gửi tôi đến Google (và đến trang này).
uscjeremy

@uscjeremy: Cá nhân, tôi thích sử dụng dấu gạch dưới để có số nhận dạng chỉ khác nhau trong trường hợp. Nếu tôi thiết kế một ngôn ngữ, tôi sẽ có nó là sự kết hợp của các quy tắc phân biệt chữ hoa chữ thường và không phân biệt chữ hoa chữ thường: mọi định danh chỉ có thể được sử dụng trong vỏ chính xác, nhưng khai báo bất kỳ mã định danh nào sẽ ẩn bất kỳ số nhận dạng nào trước đó chỉ khác nhau ở vỏ. Đã Foođịnh nghĩa ở phạm vi lớp và fooở phạm vi biến cục bộ nên hợp pháp, nhưng tất cả các tham chiếu đến biến phạm vi lớp trong phạm vi của cục bộ cần phải có this.Foo. Rule như vậy sẽ ...
supercat

@uscjeremy: ... theo tôi kết hợp những lợi thế của ngôn ngữ phân biệt chữ hoa chữ thường và chữ hoa chữ thường. Các ngôn ngữ không phân biệt chữ hoa chữ thường có lợi ích là cách đọc ngữ âm của tên định danh "foo" sẽ không rõ ràng mà không cần phải nói "chữ hoa foo" hoặc "chữ thường foo", nhưng không có lý do thực sự nào để cho phép một từ định danh được đánh vần someThingở một số nơi và sOmEtHiNgở những người khác.
supercat

1
@supercat Danh mục chấm câu Unicode chung là những gì tôi đang tìm kiếm. unicode.org/faq/puncinating_symbols.html / Tôi sẽ không thiết kế C #. Trong Java, bạn thoát khỏi một phương thức được gọi fnordvà một trường được gọi fnordmà không có bất kỳ vấn đề, viết hoa hoặc từ vô nghĩa nào. Tôi nghĩ rằng đó sẽ là một ví dụ phản tác dụng.
Tom Hawtin - tackline

3
@uscjeremy Thật khó để đồng ý rằng "clazz" rõ ràng hơn "_ class" hoặc "myClass" - Đúng. Tuy nhiên, sử dụng "_group" sẽ không phải là một tùy chọn, vì nó rõ ràng mâu thuẫn với các quy ước đặt tên Java .
MC Hoàng đế

73

Bởi vì họ không thể sử dụng từ mà họ muốn sử dụng class. Nó được bảo lưu.


2
Vâng, tôi biết, nhưng tôi nghĩ rằng đánh vần một biến đúng sẽ có ý nghĩa hơn.
Sawyer

22
@Tony - làm thế nào bạn có thể nói "bạn biết" và yêu cầu tên biến được đánh vần đúng trong cùng một nhận xét? Họ là loại trừ lẫn nhau.
duffymo

3
@Tony, bạn chỉ đơn giản là không thể đặt tên cho một "lớp" biến, đó là một từ dành riêng.
Steve Kuo

6
@duffymo: Thật buồn cười. Tôi biết lớp là từ dành riêng, và tôi thực sự yêu cầu tên biến được viết đúng, tại sao chúng loại trừ lẫn nhau ?? bạn có phải gọi nó là 'lớp' không?
Sawyer

13
Tôi đoán Tony muốn biến được đặt tên một cái gì đó mô tả hơn là "lớp". Ví dụ: "x" có thể được nói là viết đúng chính tả, nhưng nó không có nghĩa nhiều như "numberOfComments"
Peter Recore 28/03

17

Đơn giản là vì 'class' là một từ khóa dành riêng, do đó Class classkhông được phép. Do đó, bạn sẽ thấy Class clazzhoặc Class cls.


7
Tôi không thể nghĩ ra lý do để đặt tên cho một lớp Classvì có rất nhiều lớp trong bất kỳ dự án cụ thể nào mà việc gọi một lớp là lớp có vẻ vô nghĩa. Tôi cũng không thể nghĩ ra lý do để gọi VARIABLE class...
Blindy

8
Bạn đã không đặt tên cho một lớp Class, đó là java API.
Sawyer

3
@Blindy: Thế còn java.lang.Class? Bạn không có nhiều sự lựa chọn ở đó.
Dan Dyer

14
@Blindy: Đã có một lớp gọi là Class, trong đó đề cập đến, một lớp của một đối tượng. Lý do hoàn hảo để có một biến gọi là 'lớp' là khi bạn làm việc với lớp của một đối tượng (nghĩa là: tìm ra loại đối tượng là gì)
Hoàn nguyên Gonzo

3
Tôi sẽ xem xét thông tin ClassInformation, ClassMetadatahoặc một cái gì đó tương tự. Mỗi lớp là một lớp, nhưng bạn không đặt tên cho tất cả Class, bạn đặt tên cho chúng theo chức năng chính của chúng.

7

Nó đi xuống trình biên dịch thực tế và khả năng phân biệt ý nghĩa của mã thông báo trong ngữ cảnh của nó. Tuy nhiên, trong trường hợp cụ thể này, người biên dịch không có khả năng phân biệt ý classnghĩa của mã thông báo trong bối cảnh khác. Đó là một quy tắc cứng và nhanh class, bất kể bối cảnh của nó, được sử dụng để biểu thị khai báo của một lớp và do đó nó là một từ dành riêng . Đó là đơn giản và mức độ thấp như nó được.

Nếu bạn cảm thấy bị ép buộc, bạn có thể viết trình biên dịch Java của riêng bạn để bao gồm một quy tắc theo ngữ cảnh sẽ cho phép bạn sử dụng classlàm tên biến. Mặc dù tôi nghĩ rằng việc sử dụng thời gian của bạn sẽ tốt hơn rất nhiều clazzhoặc klass- nó có lẽ cũng tốt cho sức khỏe của bạn.


3
Một từ về sự bất lực : Java được thiết kế như một ngôn ngữ dành riêng . Các ngôn ngữ không dành riêng từ có thể biên dịch thành công và các câu lệnh tô sáng cú pháp như nếu sau đó thì các ngôn ngữ khác , mặc dù có thể đọc được (un). Vì vậy, trình biên dịch đã cố tình không thể
usr-local-ΕΨΗΕΛΩΝ

4

cái này bắt nguồn từ đâu?

Tôi đã nhìn thấy nó đầu tiên tại puzzlers của Josh Bloch. Nhưng tôi khá chắc chắn rằng nó đã được sử dụng sớm hơn nhiều bởi các nhà phát triển khác. Josh Bloch chỉ làm cho nó nổi tiếng hơn.


4

Java không có tính năng cho phép bạn sử dụng từ khóa làm định danh, không giống như C # với @tiền tố của nó (ví dụ:@class là một định danh hợp lệ.)


2
Đó là một định danh khác nhau. class$classlà cả hai định danh hợp lệ (nhưng khác nhau) trong JVM. Không có mã định danh nào bạn có thể viết trong tệp nguồn Java dịch sang "class"VM.
vây

2

Nó chỉ là một từ tiếng Anh được thay thế (Equavalent) bởi Keyword Class Keyword, để làm cho mọi người hiểu rằng đó là một Class. và nó gần như là để tăng khả năng đọc của Bộ luật

Không có gì lớn logic liên quan đến điều này



0

Chúng tôi sử dụng clazz vì lớp là một tiêu đề loại. Ví dụ: bạn sử dụng lớp ở đây:

public class HelloWorld {

và đây:

Object.class.getName();

Thật không may, chúng ta phải sử dụng tên thay thế như clazz.


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.