对与错,我目前认为我应该始终尝试使我的代码尽可能地健壮,即使这意味着添加我知道现在将无用的冗余代码/检查,但是它们可能是下线的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
。
另一方面,在很多情况下,这种代码使使用新行为增强代码变得容易得多,因为我不必回头并确保所有相关检查都已到位。
对于此类代码,是否有任何通用的经验法则指南?(我也想知道这是好事还是坏事?)
注意:这可以被认为与这个问题类似,但是与那个问题不同,我想在没有截止日期的情况下回答。
TLDR:我是否应该进一步添加冗余代码,以使其将来可能变得更强大?
if(rows.Count == 0)
永远不会发生,那么您可以在发生这种情况时提出一个例外-然后检查您的假设为什么出错了。
rows
为空?至少在.NET中,没有充分的理由使集合为空。 可以确定为空,但不能为null。如果rows
为null,我会抛出一个异常,因为这意味着调用者在逻辑上有所失误。