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)
architecture
anti-patterns
keppla
sumber
sumber
Jawaban:
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.
sumber
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.
sumber
Dalam JavaScript, ini disebut sebagai
undefined
, yang merupakan nilai sentinel unik, berbeda darinull
.Anda dapatkan
undefined
dengan mengevaluasi variabel globalundefined
, 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
undefined
nilai dipaksa menjadiObject
itu menjadinull
, tetapi tidaknull
.Inilah sedikit ilustrasi:
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.sumber