Saya percaya alasan penggunaan nihil dan null adalah karena yang pertama adalah kata benda, dan yang terakhir terutama kata sifat (saya memeriksa di web dan di kamus kertas saya: American Heritage 1992).
Mengenai makna dan sejarah, NIL adalah kontraksi dari bahasa Latin "nihil" yang berarti "tidak ada".
Sepengetahuan saya, penggunaan nama nil
untuk menunjukkan sebuah null pointer diperkenalkan dengan bahasa pemrograman Lisp (1958).
Sebuah nol pointer adalah nilai pointer yang seharusnya untuk menunjuk ke apa-apa, dan harus demikian tidak dereferenced. Dalam kebanyakan kasus, pointer hanyalah alamat memori. Variabel apa pun (yaitu, lokasi mana pun) yang dimaksudkan mengandung pointer seperti itu akan selalu mengandung beberapa konfigurasi bit, dan konfigurasi semacam itu dapat dibaca sebagai alamat memori. Oleh karena itu sering terjadi bahwa nilainya nil
akan menjadi alamat area memori yang dilarang untuk program, sehingga menyebabkan beberapa bentuk kegagalan (mungkin mengganggu) jika program mencoba melakukan dereferensi nil
, yang hanya bisa merupakan kesalahan.
Memiliki nilai standar yang telah ditentukan sebelumnya untuk memainkan peran ini sangat penting dalam bahasa yang menggunakan pointer secara eksplisit, karena penting untuk dapat menguji apakah pointer secara bertahap menunjuk ke beberapa lokasi memori, atau tidak. Biasanya, di Lisp, daftar dibuat sebagai suksesi pasangan "kontra" yang berisi penunjuk "mobil" ke elemen daftar dan penunjuk "cdr" ke pasangan berikutnya. Dalam pasangan terakhir dari daftar, penunjuk kedua adalah nil
.
Ini sesuai dengan definisi rekursif daftar sebagai daftar kosong, atau elemen daftar yang disatukan dengan daftar. Oleh karena itu daftar tanpa elemen diwakili oleh nil
. Daftar kosong ini adalah identitas dari daftar monoid.
Karena daftar dapat digunakan untuk mewakili set, set kosong dapat dalam hal itu juga diwakili oleh nil
.
Dengan demikian nil
secara historis nilai pointer khusus, tetapi kemudian dipahami sebagai nilai identitas khusus untuk domain yang lebih abstrak lainnya, seperti daftar atau set.
Pointer sama dengan nil
adalah pointer nol, nol menjadi kata sifat dan bukan substantif (yaitu kata benda).
Penggunaan kedua kata yang terkoordinasi, sebagai kata sifat dan kata benda cukup konsisten dengan praktik lainnya. Null kualifikasi sering digunakan untuk nol dari struktur aljabar, seperti identitas monoid: elemen nol . Daftar membentuk monoid , di mana nilai nil adalah identitas. Hal yang sama berlaku untuk set (meskipun mereka membentuk aljabar dengan lebih banyak properti). Seseorang mengatakan dengan cara yang sama bahwa integer adalah nol ketika itu nol.
Ada banyak variasi dalam penggunaan kata-kata ini dan yang lainnya, seperti tidak ada, tergantung pada penulis dan keistimewaan bahasa pemrograman.
Dua konotasi utama adalah , seperti dijelaskan di atas
sebagai standar "nilai tidak terdefinisi", sebenarnya mewakili tidak adanya nilai yang dapat digunakan.
sebagai nilai identitas suatu domain
Ini menunjukkan bahwa tidak cukup akurat untuk menyatakan bahwa NIL adalah " nilai yang mewakili" tidak adanya nilai ", seperti yang dilakukan oleh Gilles dalam jawaban yang diterima . Itu tergantung pada bahasa dan penggunaannya. Bahasa pemrograman LISP mungkin memperkenalkan NIL dalam terminologi pemrograman 55 tahun yang lalu. Dalam LISP, NIL
adalah daftar kosong, dan dapat dengan setara dicatat ()
yang merupakan representasi alami dari daftar kosong.Itu tidak mewakili tidak adanya nilai. Kadang-kadang digunakan sebagai tempat-tempat untuk nilai yang hilang, meskipun itu sering harus dihindari justru karena daftar kosong adalah nilai. Apa yang dimaksud dengan nilai yang hilang dalam struktur dalam objek arbitrer, yang dipilih oleh programmer, yang tidak dapat dikacaukan dengan nilai yang dapat diterima.
Kedua konsep ini agak berbeda, meskipun kami telah menunjukkan di atas bahwa mereka dapat saling berhubungan. Mungkin menarik untuk memiliki mode taksonomi terperinci dari penggunaan terminologi yang disebutkan oleh Gilles'answer, untuk melihat apakah penggunaan masing-masing kata ini lebih berorientasi pada satu konotasi atau yang lain.
Nama tidak lebih dari apa yang ditugaskan untuk artinya dalam konteks yang diberikan, oleh siapa pun yang mendefinisikan wacana. Beberapa kegunaan lebih umum, lebih alami, atau lebih konsisten, tetapi kita harus selalu memeriksa definisi dan memastikan makna apa yang dimaksudkan dalam setiap konteks. Dan seseorang seharusnya tidak selalu berharap terminologi telah dipilih dengan rasa atau konsistensi.
NULL
(untuk kompatibilitas C) dannil
; memanggil metode padanil
adalah no-op. JavaScript memiliki keduanyanull
(nilai yang tidak mewakili apa-apa) danundefined
(nilainya bahkan tidak disetel).