3

他の人がこのようなことをするのは冗長だと思うかどうか疑問に思いました...

const double RESET_TIME = 0.0;
timeSinceWhatever = RESET_TIME;

ただするのではなく

timeSinceWhatever = 0.0;

読みやすさを支援する最初の例を見つけましたか?議論はマジックナンバーを使用することに帰着し、0と1はルールの「例外」と見なされますが、これらの例外は変数の初期化またはインデックスアクセスにのみ適用されると常に考えてきました。数字に意味がある場合は、その意味に変数を付ける必要があります。

この仮定が有効なのか、それとも名前付き定数を0に指定するのが冗長なのか疑問に思います。

4

8 に答える 8

7

さて、あなたの特定の例では、定数を使用することはあまり意味がありません。

ただし、たとえば、将来RESET_TIMEが変更される可能性が少しでもある場合(たとえば、1になる場合)は、必ず定数を使用する必要があります。

数値から意図が明らかでない場合も、定数を使用する必要があります。timeSinceWhatever = 0;しかし、あなたの特定の例では、それはより明確だと思いますtimeSinceWhatever = RESET_TIME

于 2009-12-18T02:37:10.120 に答える
3

通常、リテラルを使用するだけでなく定数を定義することの利点の1つは、値を一度に複数の場所で変更する必要がある場合です。

あなた自身の例から、いくつかのあいまいな新しいビジネスルールのためにREST_TIMEを-1.5にする必要がある場合はどうなりますか?定数の定義である1つの場所を変更することも、最後に0.0をfloatリテラルとして使用したすべての場所で変更することもできます。

要するに、定数を定義することは、一般に、主に保守性に役立ちます。

于 2009-12-18T02:36:59.103 に答える
2

より具体的にして、自分がしていることを変更する理由を他の人に知らせたい場合は、代わりに次のような関数を作成することをお勧めします(言語で関数が浮かぶことが許可されている場合)。

timeSinceWhenever = ResetStopWatch();

または、ユニットを扱う場合は、関数型が組み込まれているライブラリを見つけるか、独自のライブラリを作成することをお勧めします。そのようなライブラリはたくさんあるので、時間をかけて自分で作成することはお勧めしません。それが役立つ場合、私は以前にコードでこれを見ました:

Temperature groundTemp = Temperature.AbsoluteZero();

これは、何が起こっているかを示す良い方法です。

于 2009-12-18T02:58:23.333 に答える
1

RESET_TIME0.0とは異なる可能性がある場合にのみ定義します。そうすれば、1つの変更を加えて、すべての参照を更新できます。RESET_TIMEそれ以外の場合は、0.0が私の目にはより良い選択であるため、トレースバックして何が定義されているかを確認する必要はありません。

于 2009-12-18T02:36:31.193 に答える
1

定数は、コードの後続のバージョンで変更できる値を使用できるため、望ましい方法です。特にオブジェクト指向言語でプログラミングしている場合は、定数を使用できるとは限りません。また、基本的なデータ型を含まない定数を定義することはできません。一般に、プログラミング言語には、変更できないオブジェクト/データ型を定義する方法が常にあります。

于 2009-12-18T03:06:29.187 に答える
0

RESET_TIMEがコードで頻繁に使用されており、値を変更したい場合は、すべてのステートメントで行うのではなく、一度行う方がよいでしょう。

于 2009-12-18T02:36:41.163 に答える
0

定数よりも優れている場合は、構成変数にして、デフォルト値に設定します。しかし、はい、RESET_TIMEは、それが複数回使用されている場合はより読みやすく、そうでない場合はコードコメントを使用するだけです。

于 2009-12-18T03:01:47.743 に答える
-1

そのコードは大丈夫です。const変数は変更できない変数です。だから、何かをリセットしたいと思うときはいつでも、あなたはいつでもそれをするためにあなたのconstを持つことができます

于 2009-12-18T02:36:43.893 に答える