Saya bertanya-tanya apakah saya harus mempertahankan nilai pengembalian pemanggilan metode dengan memvalidasi bahwa mereka memenuhi harapan saya, bahkan jika saya tahu bahwa metode yang saya panggil akan memenuhi harapan tersebut.
DIBERIKAN
User getUser(Int id)
{
User temp = new User(id);
temp.setName("John");
return temp;
}
HARUS SAYA LAKUKAN
void myMethod()
{
User user = getUser(1234);
System.out.println(user.getName());
}
ATAU
void myMethod()
{
User user = getUser(1234);
// Validating
Preconditions.checkNotNull(user, "User can not be null.");
Preconditions.checkNotNull(user.getName(), "User's name can not be null.");
System.out.println(user.getName());
}
Saya menanyakan hal ini pada level konseptual. Jika saya tahu cara kerja metode yang saya panggil. Entah karena saya menulisnya atau saya memeriksanya. Dan logika dari nilai yang mungkin dikembalikan memenuhi prasyarat saya. Apakah "lebih baik" atau "lebih tepat" untuk melewatkan validasi, atau haruskah saya masih mempertahankan nilai-nilai yang salah sebelum melanjutkan dengan metode yang saat ini saya laksanakan meskipun itu harus selalu berlalu.
Kesimpulan saya dari semua jawaban (jangan ragu untuk menjawab sendiri):
Tegaskan kapan- Metode ini telah menunjukkan perilaku buruk di masa lalu
- Metode ini dari sumber yang tidak dipercaya
- Metode ini digunakan dari tempat lain, dan tidak secara eksplisit menyatakan post-kondisi
- Metode ini sesuai dengan Anda (lihat jawaban yang dipilih untuk detail)
- Metode ini secara eksplisit mendefinisikan kontraknya dengan sesuatu seperti dokumen yang tepat, tipe keselamatan, uji unit, atau pemeriksaan pasca-kondisi
- Kinerja sangat penting (dalam hal ini, mode debug mode dapat digunakan sebagai pendekatan hybrid)
Null
)? Mungkin sama bermasalahnya jika namanya ""
(bukan null tetapi string kosong) atau "N/A"
. Entah Anda bisa mempercayai hasilnya, atau Anda harus paranoid dengan tepat.