À tort ou à raison, je suis actuellement convaincu que je devrais toujours essayer de rendre mon code aussi robuste que possible, même si cela implique d'ajouter du code / des contrôles redondants qui, je le sais , ne seront d'aucune utilité pour le moment, mais pourrait être x nombre d'années sur la ligne.
Par exemple, je travaille actuellement sur une application mobile qui contient ce morceau de code:
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...
}
En ce qui concerne plus particulièrement la section deux, je sais que si la section un est vraie, la section deux le sera également. Je ne vois aucune raison pour laquelle la première section serait fausse et la deuxième section évaluerait la vérité, ce qui rend la deuxième if
déclaration superflue.
Toutefois, il se peut qu’à l’avenir cette seconde if
déclaration soit réellement nécessaire et pour une raison connue.
Certaines personnes peuvent commencer par regarder cela et penser que je programme en pensant au futur, ce qui est évidemment une bonne chose. Mais je connais quelques cas où ce type de code m'a "caché" des bogues. Cela signifie qu'il m'a fallu encore plus de temps pour comprendre pourquoi la fonction xyz
agit abc
alors qu'elle devrait l'être def
.
D'autre part, il y a eu de nombreux cas où ce type de code a rendu beaucoup plus facile l'amélioration du code avec de nouveaux comportements, car je n'ai pas à revenir en arrière et à m'assurer que toutes les vérifications pertinentes sont en place.
Existe-t-il des instructions générales concernant ce type de code? (J'aimerais aussi savoir si cela serait considéré comme une bonne ou une mauvaise pratique?)
NB: Ceci pourrait être considéré comme similaire à cette question, mais contrairement à cette question, j'aimerais une réponse en supposant qu'il n'y a pas de délai.
TLDR: Dois-je aller jusqu'à ajouter du code redondant afin de le rendre potentiellement plus robuste à l'avenir?
if(rows.Count == 0)
n'arrivera jamais, vous pouvez alors déclencher une exception - et vérifier ensuite pourquoi votre hypothèse est devenue fausse.
rows
jamais nul? Il n'y a jamais de bonne raison, du moins dans .NET, pour qu'une collection soit nulle. Vide , bien sûr, mais pas nul . Je lève une exception si rows
est null, parce que cela signifie que l'appelant manque de logique.