Trong khi tạo ứng dụng khách cho API web bằng C #, tôi đã gặp phải một vấn đề liên quan đến null
giá trị mà nó sẽ đại diện cho hai điều khác nhau:
- không có gì , ví dụ
foo
có thể có hoặc không cóbar
- không xác định : theo mặc định, phản hồi API chỉ bao gồm một tập hợp các thuộc tính, bạn phải cho biết thuộc tính bổ sung nào bạn muốn. Vì vậy, không biết có nghĩa là tài sản không được yêu cầu từ API.
Sau một số tìm kiếm, tôi đã tìm ra loại Có thể (hoặc Tùy chọn), cách nó được sử dụng trong các ngôn ngữ chức năng và cách nó "giải quyết" các vấn đề hội thảo null bằng cách buộc người dùng nghĩ về sự vắng mặt của giá trị. Tuy nhiên, tất cả các tài nguyên tôi gặp đều nói về việc thay thế null bằng Có thể . Tôi đã tìm thấy một số đề cập về logic ba giá trị , nhưng tôi không hiểu đầy đủ về nó và hầu hết các lần đề cập đến của nó là trong bối cảnh "đó là một điều xấu".
Bây giờ tôi đang tự hỏi liệu có ý nghĩa gì khi có cả khái niệm null và Có thể , đại diện cho ẩn số và không có gì tương ứng. Đây có phải là logic ba giá trị mà tôi đọc được không, hay nó có tên khác không? Hoặc là cách dự định để làm tổ Có thể trong Có thể?
M M x
và M x
nên có cùng một ngữ nghĩa.
Maybe a
là giống như , ngữ nghĩa, cũng giống như một + 1 + 1 , và đẳng cấu với gõ từ @Andej câu trả lời. Bạn cũng có thể xác định thể hiện đơn nguyên của riêng mình cho loại này và do đó sử dụng các tổ hợp đơn nguyên khác nhau. Maybe Maybe a
UserInput a
M (M x)
và M x
nên có cùng ngữ nghĩa". Lấy M = List
ví dụ: danh sách các danh sách không giống với danh sách. Khi M
là một đơn nguyên, có một chuyển đổi (cụ thể là nhân đơn nguyên) từ M (M x)
để M x
giải thích mối quan hệ giữa họ, nhưng họ không có "cùng một ngữ nghĩa".
null
. Đó là một ý tưởng hoàn toàn bị phá vỡ.