Java 所有变量名称中是否应始终包含度量单位?

Java 所有变量名称中是否应始终包含度量单位?,java,naming-conventions,Java,Naming Conventions,对于是否应该在变量中包含度量单位,我看到了一些不同的观点,我不太确定如何处理这种情况 例如,如果我有一个存储了从加速计获得的“加速度”的变量,我是否必须在变量名称中明确说明其测量单位,即米/秒平方 Double acceleration; // m/s^2 // or this Double accelerationMetersPerSecondSquared // or maybe this Double accelerationMeterPerSecSqr 如你所见,我担心的是,如果测量单

对于是否应该在变量中包含度量单位,我看到了一些不同的观点,我不太确定如何处理这种情况

例如,如果我有一个存储了从加速计获得的“加速度”的变量,我是否必须在变量名称中明确说明其测量单位,即米/秒平方

Double acceleration; // m/s^2
// or this
Double accelerationMetersPerSecondSquared
// or maybe this
Double accelerationMeterPerSecSqr
如你所见,我担心的是,如果测量单位很复杂,变量名会变得很长,如果它是加速度,已知单位为m/s^2,那么有必要使用它吗

当然,在其他情况下,有必要使用测量单位,例如使用变量来存储时间

int time; // time in what unit??
// this is more clear
int timeInSeconds;

至少对于第二部分,Java“日期-时间”API的最新更新有一个简单的答案

int time; // time in what unit??
变成:

Duration somePeriodOfTime ...
这可能告诉我们第一个示例的理想解决方案是什么:也定义不同的类型。所以不要使用表示正方形的双精度符号

创建一个类(最好使用“值”语义),比如
Area
,它总是包含一个数值(可能是双精度)及其单位


然后可以将该单元实现为enum,然后很好地添加一些内置的转换代码,几乎神奇地完成平方英尺到平方米的转换。

IMHO,我总是喜欢可读的变量名称,长或短。但是,我已经看到了一些代码,其中创建了一个类(如果度量单位是重要信息)、封装操作和单元检查。这是一个有趣的问题,我的建议是做你和你的团队认为最好的事情。与您的团队一起决定大家更了解的格式。不管是不是新来的,以上都没有。在类型中表示单位,而不是变量名称;那你就不能把事情搞砸了
java.time.Duration
可以捕获秒数、分钟数或其他数字;您可以在需要时将其转换为秒,但您试图表达的是时间上的持续时间。为
加速编写自己的类
;创建适当的方法使其脱离距离、速度和时间。长变量名本身并不是一件坏事。目标是提高可读性,减少阅读代码时的认知开销。就加速度而言,通常假设单位为m/s^2。事实上,如果您通常使用国际单位制,我建议省略单位,除非它们是非标准的(或者不是简单的推断)。至于“time”变量,我建议不要使用这个名称,因为它可能意味着一个时间戳,也可能是一个持续时间。是秒还是毫秒?我认为“持续时间秒”将消除这种模糊性。这取决于很多。虽然在有理由怀疑的地方加入该单位的好处显而易见,但IMHO总是以各种名义出现,这一点太过强烈和僵化。