Katakanlah Anda diberi yang berikut ...
List<Thing> theThings = fubar.Things.All();
Jika tidak ada yang kembali, apa yang Anda harapkan dari fubar.
Sunting: Terima kasih atas pendapatnya. Saya akan menunggu sedikit dan menerima entri dengan maksimal.
Saya setuju dengan tanggapan sejauh ini, terutama yang menyarankan koleksi kosong. Vendor menyediakan API dengan beberapa panggilan yang mirip dengan contoh di atas. Vendor yang menghasilkan $ 4,6 juta pendapatan melalui API mereka tahun lalu, BTW. Mereka melakukan sesuatu yang pada dasarnya tidak saya setujui - mereka membuat pengecualian.
Things
? Jika masuk akal untuk memilikiThings
bidang kembali nol, maka masuk akal bagi Anda untuk menerima pengecualian karena Anda tidak memeriksa nol sebelum panggilan AndaAll()
. Namun, saya setuju dengan orang-orang yang berpikirfubar.Things
harus mengembalikan koleksi kosong bukan nol.Jawaban:
Dari dua kemungkinan (yaitu mengembalikan
null
atau mengembalikan koleksi kosong) saya akan memilih mengembalikan koleksi kosong, karena memungkinkan penelepon untuk melewati pemeriksaan nilai yang dikembalikan. Alih-alih menulis inimereka akan dapat menulis ini:
Fragmen kode kedua ini lebih pendek dan lebih mudah dibaca, karena level nesting lebih rendah satu per satu.
sumber
Saya harapkan daftar kosong.
theThings
masih akan menjadi objek, tetapitheThings.Count
atautheThings.size()
akan kembali0
.sumber
Masalah desain seperti itu ditangani oleh pola Obyek Null
Saran yang terutama berlaku dalam kasus Anda (kembali
List
ketika tidak adaThing
) adalah:sumber
Anda harus, IMHO, mengembalikan nilai KOSONG. Saya tidak tahu tentang C #, tetapi di Jawa kami memiliki ini:
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html
sumber
Enumerable.Empty<T>()
, yang mengembalikan yang kosongIEnumerable<T>
(lihat msdn.microsoft.com/en-us/library/bb341042.aspx )Saya akan mengembalikan koleksi kosong dengan mengembalikan nilai nol karena dengan begitu Anda dapat menghindari penulisan verifikasi nol dalam kode panggilan.
sumber
Dua solusi yang mereka maksudkan berbeda.
Jika hanya ada nol barang yang Anda kembalikan, Anda SELALU mengembalikan koleksi kosong! Ambil contoh daftar direktori. Jika tidak ada file di direktori Anda mengembalikan koleksi file kosong.
Di sisi lain, jika direktori tidak ada, itu tidak benar-benar tepat. "Aku tidak bisa mengembalikan apa pun" berarti sesuatu yang sama sekali berbeda. Dalam hal ini Anda harus mengembalikan null atau melemparkan pengecualian tergantung situasinya, jangan hanya mengembalikan koleksi kosong seperti tidak ada yang salah.
sumber