Saat membuat klien untuk API web di C #, saya mengalami masalah terkait null
dengan nilai yang mewakili dua hal yang berbeda:
- tidak ada , mis.
foo
mungkin atau mungkin tidakbar
- tidak diketahui : secara default respons API hanya mencakup subset properti, Anda harus menunjukkan properti tambahan yang Anda inginkan. Jadi tidak diketahui berarti bahwa properti itu tidak diminta dari API.
Setelah beberapa pencarian saya menemukan tentang jenis Maybe (atau Option), bagaimana ini digunakan dalam bahasa fungsional dan bagaimana "memecahkan" masalah null dereferencing dengan memaksa pengguna untuk berpikir tentang kemungkinan tidak adanya nilai. Namun, semua sumber yang saya temui berbicara tentang mengganti null dengan Maybe . Saya memang menemukan beberapa menyebutkan logika bernilai tiga , tapi saya tidak sepenuhnya memahaminya dan sebagian besar menyebutkannya dalam konteks "itu hal yang buruk".
Saya sekarang bertanya-tanya apakah masuk akal untuk memiliki konsep null dan Maybe , masing-masing untuk mewakili yang tidak diketahui dan tidak sama sekali . Apakah ini logika tiga nilai yang saya baca, atau apakah itu memiliki nama lain? Atau apakah cara yang dimaksudkan untuk bersarang dalam Maybe in a Maybe?
M M x
dan M x
harus memiliki semantik yang sama.
Maybe a
sama dengan , secara semantik, sama dengan , dan isomorfik untuk mengetik dari jawaban @Andej. Anda dapat mendefinisikan turunan monad Anda sendiri untuk jenis ini juga dan karenanya menggunakan kombinator monad yang berbeda. a + 1 + 1Maybe Maybe a
UserInput a
M (M x)
dan M x
harus memiliki semantik yang sama". Ambil M = List
contoh: daftar daftar tidak sama dengan daftar. Ketika M
adalah monad, ada transformasi (yaitu monad perkalian) dari M (M x)
ke M x
yang menjelaskan hubungan antara mereka, tetapi mereka tidak memiliki "semantik yang sama".
null
. Itu adalah ide yang benar-benar rusak.