有更少的代码行总是更好?

时间:2013-07-14 17:48:01

标签: c# coding-style

哪个最好?

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;
}

尝试将它们全部放在一行上是否更好?所以整体代码较少,或者像第二行一样将其展开?

一个或那个更快吗?有没有好处,例如编译时?

3 个答案:

答案 0 :(得分:3)

你的情况很简单,所以第一个是好的。但总的来说,我会选择第二个。 重要的是你(和其他人)可以读取代码,但不需要节省内存(代码行数较少,变量较少)。

如果您选择以第二种方式编写代码,您的代码将更容易理解和调试。如果您的变量名称足够好地解释代码,那么您也不必有很多注释,这使得代码更容易阅读。 (我不是告诉你停止评论,而是编写不需要琐碎的评论的代码!)

有关更多答案,请参阅this question

答案 1 :(得分:0)

我的经验法则是包含足够的内容来完整描述代码的意图,而不是更多。在我看来,为变量赋值只是为了立即使用这些变量实际上是不太可读。它足够好地传达程序流程,但不传达实际意图。

如果您将该功能从dbReturn重命名为GetDatabaseValue,那么我认为我不能提出一种更具表现力的方式来编写此功能:

return (GetDatabaseValue("NUns") / GetDatabaseValue("TSpd")) * 60);

这完美地传达了意图(尽管我不知道"NUns""TSpd"是什么意思)。较少的符号意味着在阅读代码时需要理解的内容较少。

完全披露:包含额外符号确实可以提高可调试性。当我第一次构建一个函数时,我会这样写,这样我就可以找到出错的地方。但是,当我对实施感到满意时,我尽可能地压缩它以便我和我的同事们理智。

据我所知,任何一种方法都不会获得运行时性能提升。编译器很棒 - 他们在你不知情的情况下进行内联。唯一的区别在于代码的可读性。

答案 2 :(得分:-2)

对我来说,更长的时间总是更好。现代编译器将大多数代码缩小到非常快。但是,通过大量注释和易于阅读的代码来维护代码非常重要....特别是如果你是那些必须维护别人代码的人之一!

所以,我的投票是较长的版本(用评论解释你在做什么!)