2010-01-24 79 views

Trả lời

11

Có, phân biệt chữ hoa chữ thường. Đó là cách này vì di sản của nó từ C. Để giữ cho ngôn ngữ quen thuộc hơn với những gì mọi người đã sử dụng để "trong ngày", họ để nó như trường hợp nhạy cảm. Có một lợi thế bổ sung, vì các số nhận dạng Java có thể gần như là bất kỳ ký tự nào Unicode. Bạn không phải lo lắng về việc liệu một nhân vật có thể được viết trên hay không.

Ví dụ: ß có tương đương với ss không?

+0

Ký tự Unicode nào? –

+0

@Cole "Cole9" Johnson ß LATIN NHỎ LETTER SHARP S Unicode: U + 00DF, UTF-8: C3 9F –

+0

An S, eh? Vậy tại sao kết quả 'chữ thường (U + 00DF)' lại thành 'ss'? Tôi chắc chắn nó sẽ chỉ là 's'. –

6

Mã định danh phân biệt chữ hoa chữ thường bởi vì đối chiếu là một vấn đề khó khăn, phụ thuộc vào ngôn ngữ.

+1

Thu thập Unicode xác định đơn đặt hàng trước, có nghĩa là * cũng * xác định so sánh phân biệt chữ hoa chữ thường. – Tobu

+1

Tôi đã sửa chữa; lấy làm tiếc. Tôi không thể thay đổi phiếu bầu được nữa, mặc dù kể từ khi Joel và Jeff quyết định sẽ là một ý tưởng hay rằng các cuộc thảo luận sẽ không bao giờ ảnh hưởng đến ý kiến ​​của một người. – Joey

+0

Cảm ơn, và tôi thà phớt lờ điều kiện tăng cường tích cực. – Tobu

3

Có. Java phân biệt chữ hoa chữ thường vì hầu hết các ngôn ngữ lập trình đều là!

+2

Tôi muốn nói đó là một lời giải thích khá kém. – MightyPork

6

Java phân biệt chữ hoa chữ thường vì nó sử dụng cú pháp kiểu C. Trường hợp nhạy cảm là hữu ích bởi vì nó cho phép bạn suy ra những gì một tên có nghĩa là dựa trên trường hợp của nó. Ví dụ, tiêu chuẩn Java cho tên lớp là viết hoa chữ cái đầu tiên của mỗi từ (Integer, PrintStream, v.v.). Tiêu chuẩn cho tên biến và phương thức là chữ thường của chữ cái đầu tiên của từ đầu tiên và viết hoa tất cả các chữ cái đầu tiên khác (number, println(), checkError(), v.v ...). Và tiêu chuẩn cho các hằng số là chữ hoa với dấu gạch dưới (SOME_CONSTANT). Trong khi bạn không bắt buộc phải tuân thủ các quy tắc này trong mã của bạn (nó sẽ biên dịch ngay cả khi bạn phá vỡ các quy tắc này), mã dựng sẵn của Java tuân theo chúng và tất cả các thư viện Java chính cũng làm như vậy. Và mã của bạn thực sự cũng nên tuân thủ các quy tắc này, vì nó giúp các nhà phát triển khác suy ra ý nghĩa khi họ thấy chữ viết hoa.

4

Đây là một quyết định kỹ thuật hơn. Java có ý định là nền tảng độc lập. Các lớp Java công khai được lưu trữ với gói/classname trong hệ thống tập tin. Trong các nền tảng không phải Windows, tên tệp phân biệt chữ hoa chữ thường. Nó sẽ thất bại trên đó nếu bạn không sử dụng một trường hợp chính xác để tải/chạy lớp. Nhu cầu về độ nhạy của trường hợp này được mở rộng đến các số nhận dạng khác trong Java (mà cuối cùng mang lại chỗ cho các lợi thế khác (nhưng phi kỹ thuật) như quy ước đặt tên).

1

Trình biên dịch Java và trình thông dịch phân biệt chữ hoa chữ thường, vì vậy bạn phải viết hoa một cách nhất quán.

HelloWorldApp không giống với Helloworldapp.

Độ nhạy trường hợp này phản ánh di sản của Java là sự phát triển nhanh của C và C++.

33

Tôi đọc ở đâu đó rằng Java phân biệt chữ hoa chữ thường. Tôi đã không thể xác nhận điều này.

Mã nguồn Java phân biệt chữ hoa chữ thường, nếu bạn muốn. tức là Double không cùng loại với double và bạn có thể có hai biến khác nhau và riêng biệt myDatamydata.

Có phải không? Nếu vậy, tại sao?

Độ nhạy trường hợp là tiêu chuẩn trong hầu hết các ngôn ngữ lập trình và môi trường, vì chữ hoa và chữ thường được thể hiện khác nhau ở các cấp thấp nhất. Với một máy tính, "a" và "A" là hai thứ hoàn toàn khác nhau và phải mất thêm công sức để làm cho nó hoạt động như thể chúng giống nhau.

Hơn nữa, một số ngôn ngữ có quy tắc đặc biệt rất phức tạp cho vỏ bọc, ví dụ: chữ cái tiếng Đức ß không có phiên bản chữ hoa và thường được viết tắt là "SS" - vì vậy nên "weiß" và "WEISS" được coi là giống hệt nhau về cú pháp? Thậm chí tệ hơn là tiếng Thổ Nhĩ Kỳ: chúng có hai chữ cái riêng biệt i có và không có dấu chấm, và mỗi chữ cái có phiên bản chữ hoa riêng. Ở Thổ Nhĩ Kỳ, "IMAGE" là không phải là phiên bản chữ hoa của "hình ảnh"! Và điều này không liên quan chút nào, đặc biệt là đối với Java, vì bạn thực sự có thể sử dụng tất cả các chữ cái này làm định danh trong các chương trình Java của bạn nếu bạn muốn.

Trong ánh sáng của tất cả điều này, rất dễ hiểu rằng các nhà thiết kế ngôn ngữ lập trình sẽ chọn giải pháp đơn giản có cú pháp phân biệt chữ hoa chữ thường.

+0

Tôi nghĩ rằng các ngôn ngữ không phân biệt dạng chữ có thể dễ dàng tồn tại mà không có vấn đề bạn đề cập đến. Nếu bạn cho phép số nhận dạng/biến/hằng số/v.v ... trong chương trình chỉ được tạo thành từ các ký tự ASCII, thì vấn đề sẽ không còn tồn tại nữa. Bên cạnh đó, ngay cả khi bạn là một lập trình viên tiếng Pháp, bạn sẽ viết bằng tiếng Anh. Mã của bạn phải được hiểu bởi càng nhiều người càng tốt. Có, các ký tự đặc biệt khác có thể (và sẽ) tồn tại trong các chuỗi ký tự trong mã của bạn, nhưng đó là một vấn đề hoàn toàn khác. Tôi không nói việc chuyển sang phân biệt chữ hoa chữ thường nên được thực hiện, tôi chỉ nói nó sẽ dễ thôi. –

+0

Thật vậy, HTML, CSS và SQL (và do đó PL/SQL) được coi là ví dụ về các ngôn ngữ không phân biệt chữ hoa chữ thường không xuất hiện do 'ß' (mặc dù đó là một điểm thú vị). –

3

Cho dù ngôn ngữ lập trình có phân biệt chữ hoa chữ thường hay không có xu hướng phân chia ý kiến ​​giữa các lập trình viên. Bất kể cuộc tranh luận, điều quan trọng cần nhớ là Java phân biệt chữ hoa chữ thường. Nó chỉ đơn giản có nghĩa là trường hợp của các chữ cái trong các chương trình Java của bạn quan trọng. Ví dụ: giả sử bạn quyết định tạo ba biến được gọi là "endLoop", "Endloop" và "EnDlOoP". Mặc dù trong tiếng Anh, chúng ta thấy các tên biến như nói cùng một điều, Java thì không. Nó sẽ đối xử với họ tất cả khác nhau.

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