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

Bel*_*gor 3 java naming-conventions

对于是否应该在变量中包含测量单位,我看到了一些不同的观点,并且我不太确定如何处理极端情况。

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

Double acceleration; // m/s^2
// or this
Double accelerationMetersPerSecondSquared
// or maybe this
Double accelerationMeterPerSecSqr
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我担心的是,如果测量单位很复杂,并且如果它是已知单位为 m/s^2 的加速度之类的变量名称,那么变量名称可能会变得很长,是否有必要使用它?

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

int time; // time in what unit??
// this is more clear
int timeInSeconds;
Run Code Online (Sandbox Code Playgroud)

Gho*_*ica 5

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

int time; // time in what unit??
Run Code Online (Sandbox Code Playgroud)

变成:

Duration somePeriodOfTime ...
Run Code Online (Sandbox Code Playgroud)

这可能告诉我们第一个示例的理想解决方案可能是什么:也定义不同的类型。因此,不要使用代表方形物体的双精度数。

创建一个类(最好具有“值”语义),这样Area始终包含一个数值(可能是双精度值)及其单位。

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