ในขณะที่สร้างไคลเอนต์สำหรับเว็บ APIใน C # ฉันพบปัญหาเกี่ยวกับnull
ค่าที่มันจะแสดงถึงสองสิ่งที่แตกต่างกัน:
- ไม่มีอะไรเช่น
foo
อาจหรือไม่มีbar
- ไม่รู้จัก : โดยค่าเริ่มต้นการตอบสนองของ API จะรวมเฉพาะชุดย่อยของคุณสมบัติเท่านั้นคุณจะต้องระบุคุณสมบัติเพิ่มเติมที่คุณต้องการ ไม่ทราบดังนั้นจึงหมายความว่าไม่ได้ขอคุณสมบัติจาก API
หลังจากการค้นหาบางอย่างฉันพบเกี่ยวกับประเภทอาจ (หรือตัวเลือก) วิธีการใช้งานในภาษาที่ใช้งานได้และวิธีที่ "แก้ปัญหา" การแก้ปัญหาเป็นโมฆะโดยการบังคับให้ผู้ใช้คิดถึงการขาดค่าที่เป็นไปได้ แต่ทั้งหมดของทรัพยากรที่ผมพบพูดคุยเกี่ยวกับการเปลี่ยนnullด้วยบางที ฉันพบว่ามีเหตุผลสามประการที่มีค่าแต่ฉันไม่เข้าใจอย่างเต็มที่และส่วนใหญ่ที่กล่าวถึงในบริบทของ "มันเป็นสิ่งที่ไม่ดี"
ตอนนี้ผมสงสัยว่าถ้ามันทำให้รู้สึกที่จะมีทั้งแนวคิดของnullและอาจจะเพื่อเป็นตัวแทนที่ไม่รู้จักและไม่มีอะไรตามลำดับ นี่เป็นตรรกะสามค่าที่ฉันอ่านหรือมีชื่ออื่นหรือไม่? หรือเป็นวิธีที่ตั้งใจจะทำรังในบางทีใน?
M M x
และM x
ควรมีความหมายเดียวกัน
Maybe a
เดียวกับความหมายเหมือนกับและ isomorphic ที่จะพิมพ์จาก @Andej คำตอบ คุณสามารถกำหนดอินสแตนซ์ monad ของคุณเองสำหรับประเภทนี้ด้วยและดังนั้นจึงใช้ combinators monad ที่แตกต่าง a + 1 + 1Maybe Maybe a
UserInput a
M (M x)
และM x
ควรมีความหมายเดียวกัน" ใช้M = List
เช่น: รายชื่อของรายการไม่ได้ในสิ่งเดียวกับรายการ เมื่อM
เป็น monad มีการเปลี่ยนแปลง (คือการคูณ monad) จากM (M x)
การM x
ที่อธิบายความสัมพันธ์ระหว่างพวกเขา แต่พวกเขาไม่ได้มี "ความหมายเดียวกัน"
null
ที่จะมี มันเป็นความคิดที่แตกสลายอย่างทั่วถึง