Tôi tiếp tục nghe mọi người nói về cách các loại tham chiếu không thể vô hiệu hóa sẽ giải quyết rất nhiều lỗi và lập trình dễ dàng hơn nhiều. Ngay cả những người sáng tạo của null gọi nó là billion dollar mistake của mình, và Spec# đã giới thiệu các loại không nullable để chống lại vấn đề này.Giới thiệu về các cuộc tranh luận loại không thể vô hiệu hóa
EDIT: Bỏ qua nhận xét của tôi về SpeC#. Tôi hiểu lầm cách nó hoạt động.
EDIT 2: Tôi phải nói chuyện với những người sai, tôi đã thực sự hy vọng cho ai đó để tranh luận với :-)
Vì vậy, tôi sẽ đoán, đang trong thiểu số, rằng tôi sai, nhưng tôi không thể hiểu tại sao cuộc tranh luận này có bất kỳ công đức nào. Tôi thấy null là một công cụ tìm lỗi. Hãy xem xét những điều sau:
class Class { ... }
void main() {
Class c = nullptr;
// ... ... ... code ...
for(int i = 0; i < c.count; ++i) { ... }
}
BAM! Vi phạm quyền truy cập. Ai đó đã quên khởi chạy c
.
Bây giờ xem xét việc này:
class Class { ... }
void main() {
Class c = new Class(); // set to new Class() by default
// ... ... ... code ...
for(int i = 0; i < c.count; ++i) { ... }
}
Whoops. Các vòng lặp được âm thầm bỏ qua. Có thể mất một lúc để theo dõi vấn đề.
Nếu lớp học của bạn trống, mã sẽ không thành công. Tại sao không có hệ thống cho bạn biết (mặc dù hơi thô lỗ) thay vì phải tự mình tìm ra?
Tốt để xem những người khác được hưởng không, tôi vẫn còn ở trường nên tôi chỉ cho rằng có cái gì đó tôi đang thiếu. –
Có nhiều cách xử lý nguyên tắc hơn "không có giá trị". NULL loại trừ các kiểu nguyên thủy, chẳng hạn như int. Nó tốt hơn cho một hệ thống kiểu đại diện cho việc thiếu giá trị nhất quán trên tất cả các loại, thay vì chỉ ngầm cho các tham chiếu. Xem các tùy chọn "Có thể" và ML/OCaml/F # của Haskell "" để xem nó nên được thực hiện như thế nào. – MichaelGG
có thể trùng lặp [Giải thích tốt nhất cho các ngôn ngữ không có giá trị rỗng] (http://stackoverflow.com/questions/3989264/best-explanation-for-languages-without-null) – nawfal