na purefunctional ngôn ngữ mà các giá trị là bất biến, mỗi biến phải được khởi tạo một giá trị mà có thể được kiểm tra để chắc chắn rằng nó là hợp lệ. Điều này cho thấy rằng chúng ta
không bao giờ nên cho phép một biến tham chiếu đến người bạn cũ của chúng tôi, null. Giá trị Null là một phổ biến
nguồn của lỗi. Tony Hoare, người phát minh ra khái niệm về null, gần đây đã gọi nó là
The Billion Dollar Mistake [Hoare2009].
Mô hình của Java là để "giả vờ" có một Nulltype đó là subtype của tất cả các loại khác trong
hệ thống. Giả sử bạn có một biến kiểu String. Nếu các giá trị có thể là vô giá trị, bạn
cũng có thể nghĩ ra kiểu giống như thực sự StringOrNull. Tuy nhiên, chúng tôi không bao giờ nghĩ rằng một trong hai
điều kiện và đó là lý do tại sao chúng ta thường quên kiểm tra cho null. Những gì thực sự xảy ra là
chúng ta có một biến có thể "tùy chọn" giữ một giá trị. Vì vậy, tại sao không đại diện một cách rõ ràng
ý tưởng này trong các loại hệ thống? Xem xét các lớp trừu tượng sau đây:
gói tùy chọn;
đang được dịch, vui lòng đợi..