Tôi đã đọc về sự tiện lợi (un) của việc có null
thay vì (ví dụ) Maybe
. Sau khi đọc bài viết này , tôi tin rằng sẽ tốt hơn nếu sử dụngMaybe
(hoặc một cái gì đó tương tự). Tuy nhiên, tôi ngạc nhiên khi thấy rằng tất cả các ngôn ngữ lập trình bắt buộc hoặc hướng đối tượng "nổi tiếng" vẫn sử dụng null
(cho phép truy cập không được kiểm soát vào các loại có thể biểu thị giá trị 'không có gì') và Maybe
chủ yếu được sử dụng trong các ngôn ngữ lập trình chức năng.
Ví dụ, xem mã C # sau:
void doSomething(string username)
{
// Check that username is not null
// Do something
}
Một cái gì đó có mùi ở đây ... Tại sao chúng ta nên kiểm tra nếu đối số là null? Chúng ta không nên cho rằng mỗi biến chứa tham chiếu đến một đối tượng? Như bạn có thể thấy, vấn đề là theo định nghĩa, hầu hết các biến đều có thể chứa tham chiếu null. Điều gì xảy ra nếu chúng ta có thể quyết định biến nào là "nullable" và biến nào không? Điều đó sẽ giúp chúng tôi tiết kiệm rất nhiều nỗ lực trong khi gỡ lỗi và tìm kiếm "NullReferenceException". Hãy tưởng tượng rằng, theo mặc định, không có loại nào có thể chứa tham chiếu null . Thay vào đó, bạn sẽ tuyên bố rõ ràng rằng một biến có thể chứa tham chiếu null , chỉ khi bạn thực sự cần nó. Đó là ý tưởng đằng sau Có lẽ. Nếu bạn có một hàm mà trong một số trường hợp không thành công (ví dụ: chia cho 0), bạn có thể trả vềMaybe<int>
, nói rõ rằng kết quả có thể là một int, nhưng cũng không có gì! Đây là một lý do để thích Có thể thay vì null. Nếu bạn quan tâm đến nhiều ví dụ hơn, thì tôi khuyên bạn nên đọc bài viết này .
Sự thật là, mặc dù những nhược điểm của việc biến hầu hết các loại thành không thể mặc định, hầu hết các ngôn ngữ lập trình OO thực sự làm điều đó. Đó là lý do tại sao tôi tự hỏi về:
- Những loại đối số nào bạn sẽ phải thực hiện
null
trong ngôn ngữ lập trình của bạn thay vìMaybe
? Có lý do nào không hay đó chỉ là "hành lý lịch sử"?
Vui lòng đảm bảo bạn hiểu sự khác biệt giữa null và Có thể trước khi trả lời câu hỏi này.
null
khái niệm của nó không tồn tại (IIRC Haskell là một ví dụ như vậy).
null
trong chúng trong một thời gian dài. Không dễ để bỏ nó.