naming-conventions - 为编程中的计算保留单位

标签 naming-conventions units-of-measurement

我想知道是否有任何甜蜜的语言为“英尺”与“英寸”或“厘米”等提供某种抽象。我正在考虑在 Java 中执行以下操作:

u(56).feet() + u(26).inches()

并且能够得到类似的东西

结果为 17.7292 米。

一种可能的方法是,在创建新值时,立即将其转换为“基本”单位,例如米或其他东西,这样您就可以轻松添加它们。

但是,我宁愿有能力保存单位,这样的东西
u(799.95555).feet() - u(76).feet() 

返回
723.95555 feet

并不是
243.826452 meters - 23.1648 meters = 220.661652 meters

//220.661652 meters to feet returns 723.955551 feet 

由于这个问题看起来很常见,是否存在任何框架甚至编程语言可以优雅地处理这个问题?

我想我可以在我的方法中添加单位,将匹配的单位添加在一起,然后只转换为 +-*/ [add/subtract/multiply/divide] 当它们被请求时,这对于加减法非常有用:
//A
{
    this.inches = 36.2;
    this.meters = 1;
}

//total length is 1.91948 m

如果我将此添加到具有值的对象 B
//B
{
    this.inches = 0.8;
    this.meters = 2;
}

//total length is 2.02032 m

我得到一个新对象
{
    this.inches = 37;
    this.meters = 3;
}

//total length is 3.9398 meters

这太棒了,我可以随时转换它,没有问题。但是诸如乘法之类的操作会失败...
//A * B = 3.87796383 m^2
{
    this.inches = 28.96;
    this.meters = 2;
}

// ...but multiplying piece-wise and then adding
// gives you 2.01868383 m^2, assuming you make 2m*1m give you 2 m^2.

所以我真正想用这个例子展示的是
( A1 + A2 ) * ( Z1 + Z2 ) is not ( A1 * Z1 ) + ( A2 * Z2 )

而且我很确定这意味着如果他们想要乘法或除法,就必须转换为通用单位。

该示例主要是为了阻止反身答案,即在最后一刻转换之前逐段添加或减去它们,因为 */将失败。

tl;博士:有什么聪明的方法可以在编程中保留单位吗?是否有聪明的方法来命名方法/例程,以便我很容易理解我正在添加和减去的内容等?

最佳答案

我知道事实上有这样一种语言,虽然我自己没有使用过。
它被称为 Frink .

它不仅允许您为同一维度混合不同的单位,而且还可以对几个不同的物理测量值进行操作。 sample calculations在其网站上阅读很有趣。我特别喜欢 Superman少量。

关于naming-conventions - 为编程中的计算保留单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4319555/

相关文章:

scala - 为什么隐式搜索会受到不相关类型参数的影响?

android - Android 中的大小单位是如何应用的?

f# - 带有度量单位的方法重载

java - 按数量过滤计量单位

function - 您如何解决某些函数名称中需要使用撇号的问题?

javascript - AngularJS 中 $q 的含义是什么?

用于版本控制外部 API 的 Java 包命名

java - 命名约定 JUnit 后缀或前缀 Test

java - 我应该如何命名需要子章节形式的 Java 方法?