我正在维护一本来自书籍的数学算法的代码,并在评论中引用。如果变量名称描述变量代表什么,或者变量是否与书中的变量相匹配,是否更好?
举一个简单的例子,我可能会看到这段代码,它反映了书中的变量。
A_c = v*v/r
我可以将其重写为
centripetal_acceleration = velocity*velocity/radius
后者的优点是任何查看代码的人都能理解它。然而,前者的优点是更容易将代码与书中的内容进行比较。我可能这样做是为了仔细检查算法的实现,或者我可能想要添加额外的计算。
也许我过度思考这个问题,应该只使用注释来描述变量是什么。我倾向于支持自我记录代码(使用描述性变量名而不是添加注释来描述它们是什么),但也许这是一个注释非常有用的情况。
我知道这个问题可能是主观的,但我想知道是否有人为了做出决定而有任何指导原则,或者有关于编码数学算法的指南的链接。
答案 0 :(得分:8)
我更喜欢使用更具描述性的变量名称。您不能保证每个看到代码的人都可以访问“本书”。你可以离开并拿走你的副本,它可能已经绝版等等。在我看来,最好是描述性的。
我们在工作中使用了大量的数学参考书,我们在评论中引用它们,但我们很少使用相同的数学缩写变量名。
答案 1 :(得分:3)
如果没有,那么我将编写非常详细的代码,其中包含大量注释和长描述性变量名称。从本质上讲,我的代码变成了一篇描述算法的论文(几年前,任何人都记得Knuth的“文学编程”工作吗?虽然它的技术从未起飞,但我仿效了这种努力的精神)。我在评论中使用了大量的ascii艺术,包括方框图和其他描述性图形。我使用Jave.de - Java Ascii Vmumble Editor。
我有时会用简短,生气的小变量名来写我的数学,更容易为ME读写,因为我知道数学,然后使用REFACTOR在最后用更长,更具描述性的名称替换名称,但仅限于代码更加非正式。
答案 2 :(得分:3)
我认为这几乎完全取决于你正在为之写作的观众 - 并且也不会错误地将编译器误认为是观众。如果您的代码很可能由或多或少的“通用”程序员维护,他们可能不会/可能不会对物理知之甚少,因此他们无法识别v
和r
的含义,那么最好将它们扩展为非物理学家可识别的。如果他们将成为物理学家(或者,对于另一个例子,游戏程序员),教科书的缩写是明确和明显的,那么使用缩写。如果您不知道/无法猜出哪一个,那么在名称更长且更具描述性的情况下犯错可能更安全。
答案 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 @