我经常使用复杂的数学表达式,比如带有很多变量的长公式。因此,当我尝试编程时,为了保持变量的合理名称,我必须做这样的事情:
double getCylinderVolume(double radius, double height){
return 3.14 * radius * radius * height;
}
在这个简单的例子中效果很好。
问题是,对于更复杂的表达式,带有return语句的行可能包含数百个字符,因此原始公式不再可读。
因此,为了避免这种情况,我考虑使用引用只是为了让变量带有常用于数学的符号。像这样:
double getCylinderVolume(double radius, double height){
auto & R = radius;
auto & h = height;
return 3.14 * R * R * h;
}
因此,与前一个示例相比,最终表达式要短得多,您可以轻松查看公式。
它会对性能产生任何影响吗?
提前致谢!
答案 0 :(得分:2)
你在考虑公式的可读性是好的,但我认为你需要改变你的注意力。
理想情况下,当您查看代码库时,您应该完全了解函数的作用以及适用的位置和方式,而不考虑其实现。
这是什么意思?第一个良好的开端是正确的名称。 getCylinderVolume
是一个非常好的名字。只需知道你知道的关于函数(*)的所有知识。
但是,仅凭这一点还不够呢?例如,当你提到一个非常复杂的公式时?好吧,得到一个足够好的名称,其余的解释提供评论。描述函数计算的内容,参数是什么,然后发布数学公式。链接到可靠的在线资源以获得进一步的数学解释或项目文档页面是一个奖励。大多数IDE在自动完成建议中显示功能注释(如果正确定位和格式化)。此外,还有一些工具(如doxygen),您可以使用它们从源代码和注释中生成文档。
在函数内部,您应该注释与经典公式不同(可能由于优化)实现的公式部分。例如。一个玩具示例:如果公式为(a+b)/2
,但您编写了a + (b - a) / 2
以避免溢出问题。
(*)除了参数的域之外,例如如果您提供负输入或零输入,它会如何表现?
回答你的实际问题:
是的,您可以这样做(但添加const
)。我认为你的方法没有任何问题。任何体面的编译器都值得它的盐将优化到同一个程序集。对于简单类型(例如算术类型),您甚至可以删除引用,它仍然是相同的 - 性能明智。这成了个人喜好的问题。
虽然变量的简短非描述性名称(例如r
)不受欢迎,但我认为它不适用于此,因为变量的全名在同一范围内很容易获得。使公式更具可读性的好处值得一提。