Saya telah membaca tentang kenyamanan (bukan) memiliki null
alih-alih (misalnya) Maybe
. Setelah membaca artikel ini , saya yakin akan jauh lebih baik menggunakanMaybe
(atau yang serupa). Namun, saya terkejut melihat bahwa semua "terkenal" imperatif atau bahasa pemrograman berorientasi objek masih menggunakan null
(yang memungkinkan akses tidak dicentang ke jenis yang dapat mewakili nilai 'tidak ada'), dan yang Maybe
sebagian besar digunakan dalam bahasa pemrograman fungsional.
Sebagai contoh, lihat kode C # berikut:
void doSomething(string username)
{
// Check that username is not null
// Do something
}
Ada yang baunya tidak enak di sini ... Mengapa kita harus memeriksa jika argumennya nol? Bukankah kita seharusnya mengasumsikan bahwa setiap variabel berisi referensi ke suatu objek? Seperti yang Anda lihat, masalahnya adalah bahwa menurut definisi, hampir semua variabel dapat berisi referensi nol. Bagaimana jika kita dapat memutuskan variabel mana yang "nullable" dan mana yang tidak? Itu akan menyelamatkan kita dari banyak upaya saat debugging dan mencari "NullReferenceException". Bayangkan, secara default, tidak ada tipe yang bisa berisi referensi nol . Alih-alih itu, Anda akan menyatakan secara eksplisit bahwa variabel dapat berisi referensi nol , hanya jika Anda benar-benar membutuhkannya. Itulah ide di balik Maybe. Jika Anda memiliki fungsi yang dalam beberapa kasus gagal (misalnya pembagian dengan nol), Anda dapat mengembalikan aMaybe<int>
, menyatakan secara eksplisit bahwa hasilnya mungkin int, tetapi juga bukan apa-apa! Ini adalah salah satu alasan untuk memilih Mungkin daripada nol. Jika Anda tertarik pada lebih banyak contoh, maka saya sarankan untuk membaca artikel ini .
Faktanya adalah bahwa, meskipun ada kelemahan membuat sebagian besar tipe dapat dibatalkan secara default, sebagian besar bahasa pemrograman OO benar-benar melakukannya. Itu sebabnya saya bertanya-tanya tentang:
- Argumen seperti apa yang harus Anda terapkan
null
dalam bahasa pemrograman Anda, bukanMaybe
? Apakah ada alasan atau hanya "bagasi bersejarah"?
Harap pastikan Anda memahami perbedaan antara nol dan Mungkin sebelum menjawab pertanyaan ini.
null
atau konsep tidak ada (IIRC Haskell adalah salah satu contohnya).
null
di dalamnya. Tidak mudah menjatuhkannya begitu saja.