Benar atau salah, saya saat ini berkeyakinan bahwa saya harus selalu berusaha membuat kode saya sekuat mungkin, bahkan jika ini berarti menambahkan kode berlebihan / memeriksa yang saya tahu tidak akan ada gunanya saat ini, tetapi mereka mungkin x jumlah tahun ke depan.
Misalnya, saya sedang mengerjakan aplikasi seluler yang memiliki kode ini:
public static CalendarRow AssignAppointmentToRow(Appointment app, List<CalendarRow> rows)
{
//1. Is rows equal to null? - This will be the case if this is the first appointment.
if (rows == null) {
rows = new List<CalendarRow> ();
}
//2. Is rows empty? - This will be the case if this is the first appointment / some other unknown reason.
if(rows.Count == 0)
{
rows.Add (new CalendarRow (0));
rows [0].Appointments.Add (app);
}
//blah...
}
Melihat secara khusus pada bagian dua, saya tahu bahwa jika bagian satu benar, maka bagian dua juga akan benar. Saya tidak dapat memikirkan alasan mengapa bagian satu akan salah dan bagian dua mengevaluasi benar, yang membuat if
pernyataan kedua berlebihan.
Namun, mungkin ada kasus di masa depan di mana if
pernyataan kedua ini sebenarnya dibutuhkan, dan untuk alasan yang diketahui.
Beberapa orang mungkin melihat ini pada awalnya dan berpikir saya pemrograman dengan masa depan dalam pikiran, yang jelas merupakan hal yang baik. Tapi saya tahu beberapa contoh di mana kode semacam ini memiliki bug "tersembunyi" dari saya. Berarti saya perlu waktu lebih lama untuk mencari tahu mengapa fungsi xyz
dilakukan abc
padahal seharusnya itu dilakukan def
.
Di sisi lain, ada juga banyak contoh di mana kode semacam ini telah membuatnya jauh, lebih mudah untuk meningkatkan kode dengan perilaku baru, karena saya tidak harus kembali dan memastikan bahwa semua cek yang relevan sudah ada.
Apakah ada umum aturan-of-thumb pedoman untuk jenis kode? (Saya juga tertarik mendengar apakah ini akan dianggap praktik yang baik atau buruk?)
NB: Ini bisa dianggap mirip dengan pertanyaan ini, namun tidak seperti pertanyaan itu, saya ingin jawaban dengan asumsi tidak ada tenggat waktu.
TLDR: Haruskah saya sejauh menambahkan kode berlebihan untuk membuatnya berpotensi lebih kuat di masa depan?
if(rows.Count == 0)
tidak akan pernah terjadi, maka Anda bisa mengajukan pengecualian ketika itu terjadi - dan periksa mengapa asumsi Anda menjadi salah.
rows
bisa nol? Tidak pernah ada alasan yang bagus, setidaknya di .NET, untuk koleksi menjadi nol. Kosong , tentu, tetapi tidak nol . Saya akan melempar pengecualian jika rows
nol, karena itu berarti ada kesalahan dalam logika oleh pemanggil.