编码数学算法 - 我应该在书中使用变量还是更具描述性的变量?

时间:2011-03-25 15:13:30

标签: math naming-conventions coding-style

我正在维护一本来自书籍的数学算法的代码,并在评论中引用。如果变量名称描述变量代表什么,或者变量是否与书中的变量相匹配,是否更好?

举一个简单的例子,我可能会看到这段代码,它反映了书中的变量。

A_c = v*v/r

我可以将其重写为

centripetal_acceleration = velocity*velocity/radius

后者的优点是任何查看代码的人都能理解它。然而,前者的优点是更容易将代码与书中的内容进行比较。我可能这样做是为了仔细检查算法的实现,或者我可能想要添加额外的计算。

也许我过度思考这个问题,应该只使用注释来描述变量是什么。我倾向于支持自我记录代码(使用描述性变量名而不是添加注释来描述它们是什么),但也许这是一个注释非常有用的情况。

我知道这个问题可能是主观的,但我想知道是否有人为了做出决定而有任何指导原则,或者有关于编码数学算法的指南的链接。

7 个答案:

答案 0 :(得分:8)

我更喜欢使用更具描述性的变量名称。您不能保证每个看到代码的人都可以访问“本书”。你可以离开并拿走你的副本,它可能已经绝版等等。在我看来,最好是描述性的。

我们在工作中使用了大量的数学参考书,我们在评论中引用它们,但我们很少使用相同的数学缩写变量名。

答案 1 :(得分:3)

我写了很多数学软件。如果我可以在评论中插入对书籍或论文或(最佳)网站的非常具体的引用来解释算法并定义变量名称,那么我将使用SHORT名称,如a = v * v / r,因为它使公式更易于读取和写入并在视觉上进行验证。

如果没有,那么我将编写非常详细的代码,其中包含大量注释和长描述性变量名称。从本质上讲,我的代码变成了一篇描述算法的论文(几年前,任何人都记得Knuth的“文学编程”工作吗?虽然它的技术从未起飞,但我仿效了这种努力的精神)。我在评论中使用了大量的ascii艺术,包括方框图和其他描述性图形。我使用Jave.de - Java Ascii Vmumble Editor。

我有时会用简短,生气的小变量名来写我的数学,更容易为ME读写,因为我知道数学,然后使用REFACTOR在最后用更长,更具描述性的名称替换名称,但仅限于代码更加非正式。

答案 2 :(得分:3)

我认为这几乎完全取决于你正在为之写作的观众 - 并且也不会错误地将编译器误认为是观众。如果您的代码很可能由或多或少的“通用”程序员维护,他们可能不会/可能不会对物理知之甚少,因此他们无法识别vr的含义,那么最好将它们扩展为非物理学家可识别的。如果他们将成为物理学家(或者,对于另一个例子,游戏程序员),教科书的缩写是明确和明显的,那么使用缩写。如果您不知道/无法猜出哪一个,那么在名称更长且更具描述性的情况下犯错可能更安全。

答案 3 :(得分:3)

通常的做法是在开始正确的代码之前,在注释标题中汇总所有变量,索引和描述。例如

// A_c = Centripetal Acceleration
// v = Velocity
// r = Radius

A_c = (v^2)/r

答案 4 :(得分:1)

我投票支持“书”版本。 'v'和'r'等被很好地理解为速度和半径的缩写,并且更加紧凑。

答案 5 :(得分:0)

你能走多远?

大多数(非希腊语:-))键盘不能轻松访问Δ,但它在某些语言中作为标识符的一部分有效(例如C#):

int Δv;
int Δx;

任何事后来维护代码的人都可能每天诅咒你。类似地,对于数学中使用的许多其他符号。所以如果你不打算使用那些实际的符号(我鼓励你不要这样做),我认为你应该翻译剩下的部分,而不会使代码过于冗长。

此外,如果您需要组合算法,那些算法的变量使用是否相互矛盾呢?

答案 6 :(得分:0)

妥协可以是书中包含的代码和调试,然后在开发结束时执行全局搜索并替换所有变量,以便更容易阅读。如果你这样做,我会稍微改变变量的名称,以便以后更容易更改。

例如A_c @ = v @ * v @ / r @