哪个最好?
private long sumVals()
{
return (dbReturn("NUns") / dbReturn("TSpd")) * 60;
}
private long dbReturn(string dbField)
{
// ... access db, get value
return retVal;
}
或
private long sumVals()
{
long numUnits = dbReturn("NUns");
long targetSpeed = dbReturn("TSpd");
return (numUnits / targetSpeed) * 60;
}
private long dbReturn(string dbField)
{
// ... access db, get value
return retVal;
}
尝试将它们全部放在一行上是否更好?所以整体代码较少,或者像第二行一样将其展开?
一个或那个更快吗?有没有好处,例如编译时?
答案 0 :(得分:3)
你的情况很简单,所以第一个是好的。但总的来说,我会选择第二个。 重要的是你(和其他人)可以读取代码,但不需要节省内存(代码行数较少,变量较少)。
如果您选择以第二种方式编写代码,您的代码将更容易理解和调试。如果您的变量名称足够好地解释代码,那么您也不必有很多注释,这使得代码更容易阅读。 (我不是告诉你停止评论,而是编写不需要琐碎的评论的代码!)
有关更多答案,请参阅this question。
答案 1 :(得分:0)
我的经验法则是包含足够的内容来完整描述代码的意图,而不是更多。在我看来,为变量赋值只是为了立即使用这些变量实际上是不太可读。它足够好地传达程序流程,但不传达实际意图。
如果您将该功能从dbReturn
重命名为GetDatabaseValue
,那么我认为我不能提出一种更具表现力的方式来编写此功能:
return (GetDatabaseValue("NUns") / GetDatabaseValue("TSpd")) * 60);
这完美地传达了意图(尽管我不知道"NUns"
和"TSpd"
是什么意思)。较少的符号意味着在阅读代码时需要理解的内容较少。
完全披露:包含额外符号确实可以提高可调试性。当我第一次构建一个函数时,我会这样写,这样我就可以找到出错的地方。但是,当我对实施感到满意时,我尽可能地压缩它以便我和我的同事们理智。
据我所知,任何一种方法都不会获得运行时性能提升。编译器很棒 - 他们在你不知情的情况下进行内联。唯一的区别在于代码的可读性。
答案 2 :(得分:-2)
所以,我的投票是较长的版本(用评论解释你在做什么!)