Certo ou errado, atualmente acredito que sempre devo tentar tornar meu código o mais robusto possível, mesmo que isso signifique adicionar código / verificações redundantes que sei que não serão úteis no momento, mas eles pode ser x quantidade de anos abaixo da linha.
Por exemplo, atualmente estou trabalhando em um aplicativo para dispositivos móveis que possui 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...
}
Observando especificamente a seção dois, sei que se a seção um for verdadeira, a seção dois também será verdadeira. Não consigo pensar em nenhuma razão para o fato de a seção um ser falsa e a segunda avaliar verdadeira, o que torna a segunda if
afirmação redundante.
No entanto, pode haver um caso no futuro em que essa segunda if
declaração seja realmente necessária e por um motivo conhecido.
Algumas pessoas podem olhar para isso inicialmente e pensar que estou programando com o futuro em mente, o que obviamente é uma coisa boa. Mas conheço algumas instâncias em que esse tipo de código me "ocultou" erros. Isso significa que demorei ainda mais para descobrir por que a função xyz
está funcionando abc
quando realmente deveria estar def
.
Por outro lado, também houve vários casos em que esse tipo de código tornou muito, muito mais fácil aprimorar o código com novos comportamentos, porque não preciso voltar atrás e garantir que todas as verificações relevantes estejam em vigor.
Há algum gerais regra de polegar diretrizes para esse tipo de código? (Eu também estaria interessado em saber se isso seria considerado uma boa ou má prática?)
NB: Isso pode ser considerado semelhante a esta pergunta, mas , diferentemente dessa pergunta, eu gostaria de uma resposta, assumindo que não há prazos.
TLDR: Devo ir ao ponto de adicionar código redundante para torná-lo potencialmente mais robusto no futuro?
if(rows.Count == 0)
que nunca acontecerá, poderá gerar uma exceção quando isso acontecer - e verificar por que sua suposição se enganou.
rows
seria nulo? Nunca há um bom motivo, pelo menos no .NET, para uma coleção ser nula. Vazio , claro, mas não nulo . Eu lançaria uma exceção se rows
for nulo, porque significa que há um lapso na lógica do chamador.