Bien o mal, actualmente creo que siempre debería tratar de hacer que mi código sea lo más robusto posible, incluso si esto significa agregar código / verificaciones redundantes que sé que no serán de ninguna utilidad en este momento, pero podría ser x cantidad de años más adelante.
Por ejemplo, actualmente estoy trabajando en una aplicación móvil que tiene este código:
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...
}
Mirando específicamente la sección dos, sé que si la sección uno es verdadera, entonces la sección dos también será verdadera. No puedo pensar en ninguna razón de por qué la sección uno sería falsa y la sección dos evalúa verdadero, lo que hace que la segunda if
declaración sea redundante.
Sin embargo, puede haber un caso en el futuro en el que esta segunda if
declaración sea realmente necesaria, y por una razón conocida.
Algunas personas pueden ver esto inicialmente y pensar que estoy programando con el futuro en mente, lo que obviamente es algo bueno. Pero sé de algunos casos en los que este tipo de código me ha "ocultado" errores. Lo que significa que me ha llevado aún más tiempo descubrir por qué la función xyz
está funcionando abc
cuando realmente debería estar funcionando def
.
Por otro lado, también ha habido numerosos casos en los que este tipo de código ha hecho que sea mucho, mucho más fácil mejorar el código con nuevos comportamientos, porque no tengo que regresar y asegurarme de que todas las verificaciones relevantes estén en su lugar.
¿Hay alguna regla general para este tipo de código? (¿También me interesaría saber si esto se consideraría una buena o mala práctica?)
NB: Esto podría considerarse similar a esta pregunta, sin embargo , a diferencia de esa pregunta, me gustaría una respuesta asumiendo que no hay plazos.
TLDR: ¿Debería ir tan lejos como para agregar código redundante para hacerlo potencialmente más robusto en el futuro?
if(rows.Count == 0)
que nunca sucederá, entonces puede plantear una excepción cuando ocurra, y verificar por qué su suposición se equivocó.
rows
alguna vez sería nulo? Nunca hay una buena razón, al menos en .NET, para que una colección sea nula. Vacío , claro, pero no nulo . Lanzaría una excepción si rows
es nulo, porque significa que hay un lapso de lógica por parte de la persona que llama.