1

回転(フロート角度)関数があるとしましょう。この関数を呼び出すとき、この関数が角度を度またはラジアンで取るかどうかはおそらく覚えていません。このため、私はこれらのRotateDegrees(フロート角度)のような関数を呼び出します。特に、変数をdegAngleまたはradAngleと呼んだ場合は、はるかに優れています。そうすれば、他の場所を見なくても、コードが正しいかどうかをすぐに確認できます。

しかし、さらに良い方法があるかもしれません!

ユニットごとに違うクラスを作ってみませんか?好き

public class Degree
{
    public float value;

    public Degree (float value)  
    {
        this.value = value;
    }
}

時間、キロメートル、モル、光年なども同じです。

そうすれば、あいまいさはまったくなくなります。関数ごとに一連のオーバーロードを作成するか、クラスごとに変換演算子を定義するだけです。

しかし、私はそのようなコードを見たことがありません。実際にはそれほど役に立ちませんか?また、私が書いているコードはパフォーマンスが重要ですが、パフォーマンスが低下することはありますか?

4

2 に答える 2

1

C# についてはよくわかりませんが、C++ テンプレートを使用してコンパイル時にユニットを強制する方法に関するかなり有名な記事があります。記事は見つかりませんが、基本的な測定値の累乗の積として任意の単位を表すことができるというのが要点でした。たとえば、速度 = (長さ)^1*(時間)^-1 となります。だからあなたは次のようなものを定義しました

template <int lenPower, int timePower>
class Unit {
  double val;
};

typedef meter Unit<1,0>;
typedef second Unit<0,1>;
typedef velocity Unit<1,-1>;

次に、 * および + 演算子をオーバーロードして、互換性のあるユニットのみを追加できるようにし、乗算によって正しい累乗のユニットが生成され、コンパイル時に正しいユニット操作が強制されるようにします。申し訳ありませんが、詳細を覚えておらず、記事を見つけることができません。Google の「テンプレート メタプログラミング ユニットの例」と何か出てきます。また、申し訳ありませんが、C++ について話しています。C# がジェネリックをサポートしていることは知っているので、同様のことが可能になるはずです。

于 2013-02-21T03:22:56.070 に答える
1

プログラムがその特定のユニットを頻繁に使用する場合、それは間違いなく良い考えです。

ただし、クラスではなく構造体にしたい場合があります。

たとえば、私は Percent に構造体を使用するのが好きです。読みやすさが向上し、開発者が 50% を示すために 50 と 0.5 の間で混乱する問題を防ぐのに役立ちます。

例として、 Web 関連のサイズを処理するときにピクセル、パーセント、およびポイントを区別するために使用される .NET フレームワークのUnit 構造を参照してください。

于 2013-02-21T03:16:09.543 に答える