Apakah ada nama untuk masalah yang tidak diberikan / null / kosong? [Tutup]

8

Saya bekerja dengan kode, di mana data disimpan / dipertukarkan dalam struktur seperti Hashtable / Kamus / Asosiatif-Array, seperti ini

{
   'alpha': None,
   'bravo': '',
   # 'charlie' is not given
}

tidak ada banyak standartisasi, bidang mana yang 'diberikan', dan ketika diberikan, jika dapat diberikan sebagai Tidak Ada / Null / Nil atau string kosong. Akibatnya, kode tersebut dikotori dengan cek suka if hasattr(obj, 'alpha')dan fallback default.

Apakah ada nama atau istilah slang untuk anti-pola (imho) semacam ini?

MEMPERBARUI:

sepertinya, saat ini tidak ada nama, jadi saya ingin mendengar saran. Saat ini kami memiliki ini:

  • Incorporeal Horde (kredit ke psr)
keppla
sumber
5
Saya tidak akan menyebutnya anti-pola. Di dunia nyata, ada situasi ketika ada sesuatu yang hilang, dan situasi saat tidak. Jika nilai default masuk akal, oke, tapi bagaimana jika itu benar-benar null / tidak ada? Beberapa orang tidak memiliki nama tengah, misalnya. Bagaimana Anda mewakili hal itu? Itu sebabnya saya percaya ini lebih merupakan pencarian model pemrograman yang lebih baik untuk skenario semacam ini. Seperti pola objek nol, mungkin monad, atau apa pun yang ada di luar sana.
Ionuț G. Stan
Perhatikan bahwa string kosong adalah anggota sah dari himpunan semua string dan sangat berbeda dari tidak memiliki string. Ini seperti perbedaan antara 2 kalimat: "Saya punya 0 dolar." dan "Aku tidak akan memberitahumu berapa dolar yang kumiliki."
Ingo
Python memiliki kamus default yang memungkinkan Anda menghindari pemeriksaan ini. Haskell memiliki monad yang menyelesaikan semua masalah kemanusiaan.
Pekerjaan
@Ionut: ya, ada beberapa situasi, di mana 'sesuatu yang hilang' tidak apa-apa, tetapi dalam kasus saya, saya pikir, itu lebih merupakan masalah bahwa seseorang lebih suka membuat 100 penerima toleran terhadap semua omong kosong yang mungkin terjadi daripada membuat 1 atau 2 pengirim mematuhi. sebuah format. Nama tengah (atau umumnya setiap bagian dari alamat) adalah kasus klasik di mana '' baik-baik saja.
keppla
@ Ingo: ya, tetapi masalahnya adalah, bahwa dalam basis kode saya, 'makna' ini diabaikan. Semua bagian aplikasi yang berbeda mungkin menjawab untuk Urutan yang sama: {'posisi': Tidak ada}, {'posisi': []} atau hanya {}.
keppla

Jawaban:

6

Saya tidak berpikir ada nama seperti itu (saya melihat, tetapi tentu saja bagaimana Anda dapat menemukan kekurangan nama)?

Saya menyarankan nama "Incorporeal Horde", meskipun saya akan menerapkannya pada koleksi penuh benda-benda nol atau merosot - koleksi ukuran nol, nol, tidak terdefinisi, tidak ada, Tidak ada, NAN (bisa dibilang adalah jenis tepi yang berbeda), DBNull, batal, string kosong (bisa dibilang kasus khusus koleksi kosong), entri kamus hilang, dll.

Dan saya tidak akan menyebutnya anti-pola, per se, tetapi sebagai masalah dalam pengembangan perangkat lunak, terutama dalam kasus di mana lingkungan pemrograman Anda mengharuskan Anda untuk menulis kode terpisah untuk banyak kasus tersebut.

Permintaan maaf untuk jawaban yang cukup tidak informatif, tapi saya pikir itu yang terbaik yang bisa dilakukan. Plus, jika dunia mengadopsi nama karena pertanyaan Anda, itu bisa menjadi jawaban yang benar.

psr
sumber
Saya suka "Incorporeal Horde".
Sean McMillan
Kedengarannya seperti 'Magic the Gathering'. Saya suka itu. +1.
keppla
0

Dalam F # ini disediakan melalui Opsi Type (mirip dengan bahasa sebelumnya dalam keluarga yang sama). Saya telah menggunakan konsep yang sama dalam proyek C # di mana saya memiliki aturan yang saya coba untuk tidak pernah mengembalikan null dari suatu fungsi, tapi saya mengembalikan Option<T>tipe itu dari ada kemungkinan nilai None. Dengan cara itu kode panggilan tahu bahwa ia harus berurusan dengan kemungkinan itu dalam nilai pengembalian.

Saya lebih suka memiliki jenis referensi yang tidak dapat dibatalkan, sama seperti kita sekarang memiliki jenis nilai yang dapat dibatalkan, tapi itu cerita lain.

Scott Whitlock
sumber
0

Dalam JavaScript, ini disebut sebagai undefined, yang merupakan nilai sentinel unik, berbeda dari null.

Anda dapatkan undefineddengan mengevaluasi variabel global undefined, atau properti objek, yang tidak didefinisikan atau dengan mengevaluasi pernyataan, yang tidak mengembalikan nilai, seperti panggilan ke fungsi, yang tidak mengembalikan apa-apa, atau blok atau deklarasi variabel (meskipun keduanya bukan ekspresi yang valid, jadi Anda hanya akan menemukan itu dalam JavaScript REPL).

Ketika undefinednilai dipaksa menjadi Objectitu menjadi null, tetapi tidak null.

Inilah sedikit ilustrasi:

var a = [1, 2, 3];//undefined
a[0];//1
a[4];//undefined

var o = { foo: "123" };//undefined
o.foo;//"123";
o.bar;//undefined

function bar() { return null; };//undefined
bar();//null
function foo() { /*just an empty block*/};//undefined
foo();//undefined

typeof undefined;//"undefined"
typeof null;//"object"
null == undefined;//true - that is because undefined is converted to an object for comparison and thus yields null
null === undefined;//false - because they are not the same

Saya pikir masuk akal untuk memanggil nilai yang tidak terdefinisi (berbeda dengan nilai yang didefinisikan null) tidak terdefinisi, jika itu pertanyaan Anda. Menggunakan nilai sentinel yang unik untuk mengkomunikasikan tidak adanya nilai yang ditentukan adalah solusi yang bisa diterapkan untuk bahasa yang dinamis, meskipun sering kurang dipahami.

back2dos
sumber