Có nhiều người nghĩ rằng khái niệm về giá trị đặc biệt null
(vì nó được sử dụng trong lanuages như C, Java, C#, Perl, Javascript, SQL, vv) là một ý tưởng tồi. Có một số câu hỏi về điều này trên SO và P.SE, chẳng hạn như Best explanation for languages without null và Are null references really a bad thing?.Có các ngôn ngữ không có "null" không?
Tuy nhiên, tôi không thể tìm thấy bất kỳ ngôn ngữ nào không có chúng. Tất cả các ngôn ngữ tôi quen thuộc có null
hoặc một thứ gì đó tương tự (ví dụ: "không xác định" trong Perl).
Tôi nhận thấy rằng mọi ngôn ngữ đều cần một số cách để thể hiện "sự vắng mặt của một giá trị". Tuy nhiên, thay vì có "null" hoặc "undefined", điều này cũng có thể được thực hiện rõ ràng bằng cách sử dụng một cái gì đó như Maybe
(Haskell) hoặc Optional
(Ổi). Sự khác biệt chính để có "null" hoặc "undefined" là một đối tượng chỉ có thể có "không có giá trị" nếu nó có một loại cụ thể (Có thể, Tùy chọn ...). Ngược lại, "null"/"undefined" thường là giá trị hợp lệ có thể cho mọi loại.
Có bất kỳ ngôn ngữ nào không có khái niệm "rỗng" hoặc khái niệm tương tự theo ý nghĩa này không?
Con trỏ là ý tưởng tồi, không phải là số không. Trong Perl, không thể tạo một tham chiếu null hoặc một con trỏ lơ lửng. Trong nhiều ngôn ngữ hiện đại, nó cũng không thể tạo ra một con trỏ null hoặc một con trỏ lơ lửng. – shawnhcorey
Trừ khi ngôn ngữ là phạm vi để xử lý các trạng thái hữu hạn, tôi không nghĩ rằng "null" có thể tránh được. Nhu cầu đại diện cho một sự vắng mặt hoặc thiếu thông tin phát sinh khá nhanh chóng. Bạn luôn có thể có giá trị "trống" cho từng loại mà bạn tạo nhưng sau đó sẽ thực tế hơn nếu chỉ có một loại trống phổ biến cho tất cả – Pedrom
Vâng, đề xuất thông thường là làm cho "không có dữ liệu" rõ ràng. Một cái gì đó như 'Có thể' trong Haskell, hoặc 'Tùy chọn' trong ổi. Tôi sẽ chỉnh sửa câu hỏi. – sleske