Правильно чи неправильно, на даний момент я вважаю, що я завжди повинен намагатися зробити свій код максимально надійним, навіть якщо це означає додавання зайвого коду / перевірок, які, як я знаю, зараз не будуть корисні, але вони може бути x кількість років вниз за лінією.
Наприклад, зараз я працюю над мобільним додатком із таким кодом:
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...
}
Дивлячись конкретно на другий розділ, я знаю, що якщо розділ перший правдивий, то і другий розділ буде істинним. Я не можу придумати жодної причини, чому розділ перший був би помилковим, а другий - істинним, що робить друге if
твердження зайвим.
Однак у майбутньому може виникнути випадок, коли ця друга if
заява насправді потрібна і з відомих причин.
Деякі люди можуть спочатку на це поглянути і думають, що я програмую з майбутнім на увазі, що, очевидно, добре. Але я знаю кілька випадків, коли подібний код "приховував" помилки від мене. Значить, мені потрібно ще більше часу, щоб зрозуміти, чому функціонує xyz
, abc
коли вона насправді повинна виконуватись def
.
З іншого боку, також було чимало випадків, коли подібний код значно полегшив та покращив код новою поведінкою, тому що мені не потрібно повертатися назад і гарантувати, що всі відповідні перевірки є на місці.
Чи існують які - небудь загальні правила емпіричних принципів для такого коду? (Мені б також цікаво почути, чи це вважатиметься хорошою чи поганою практикою?)
NB: Це можна вважати подібним до цього питання, однак на відміну від цього питання, я хотів би відповісти, припускаючи, що немає строків.
TLDR: Чи варто зайти до того, щоб додати зайвий код, щоб зробити його потенційно більш надійним у майбутньому?
if(rows.Count == 0)
, що ніколи не відбудеться, тоді ви можете створити виняток, коли це станеться, - і перевірте, чому ваше припущення стало неправильним.
rows
коли-небудь було недійсним? Ніколи не є вагомих причин, принаймні в .NET, щоб колекція була недійсною. Порожній , звичайно, але недійсний . Я б кинув виняток, якщо він rows
є недійсним, тому що це означає, що абонент має затримку в логіці.