「足」vs「インチ」や「cm」などの抽象概念を提供する甘い言語があるかどうか疑問に思っていました。Javaで次のようなことを検討していました。プログラミングの計算単位を保存する
u(56).feet() + u(26).inches()
、結果として
17.7292メートルのようなものを得ることができます。
可能なアプローチの1つは、新しい値を作成するときに、すぐにメーターなどの「ベース」単位に変換することで、簡単に追加できます。
しかし、私はむしろ、単位を維持する能力を持っているでしょうので、何かのよう
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
{
this.inches = 0.8;
this.meters = 2;
}
//total length is 2.02032 m
とオブジェクトBにこれを追加し、私は
ある新しいオブジェクトを取得する場合10これは完全に素晴らしいですが、問題がない場合はいつでも変換できます。しかし、このような乗算が失敗するなどの操作...
//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)
だったと私は、これは1がAに変換することがある意味かなり確信しています彼らが掛け算や分割をしたい場合には、共通の単位である。
*
と/
は失敗するため、この例ではほとんどの場合反射的な回答を抑止し、最後の瞬間に変換する前にピース単位で加算または減算しています。
tl; dr:プログラミングでユニットを保存するための巧妙な方法はありますか?メソッド/ルーチンに名前を付ける巧妙な方法があるので、私が追加や減算などを理解するのは簡単ですか?
これはJavaから簡単に使用することもできますし、真剣な会議で話を30分のおならの冗談に変えることを管理している言語デザイナーは、無料のStackOverflow PRに値する! –