2009-12-18 34 views
3

我不知道別人是否覺得它多餘的做這樣的事情......爲0定義常量和1

const double RESET_TIME = 0.0; 
timeSinceWhatever = RESET_TIME; 

,而不是僅僅做

timeSinceWhatever = 0.0; 

你找到的第一個例子有助於可讀性?爭論歸結爲使用幻數,而0和1被認爲是規則的「例外」,我一直認爲這些例外只適用於初始化變量或索引訪問。當數字有意義時,它應該有一個與其含義相關的變量。

我想知道這個假設是否有效,或者是否給0命名爲常量是多餘的。

回答

3

通常情況下,定義常量,而不是僅僅使用文字的一個好處是,如果該值永遠需要同時在幾個地方需要修改。

從你自己的例子,如果REST_TIME需要什麼是-1.5,由於一些不起眼的新業務規則?你可以將它改爲一個地方,定義常量,或者你可以在上次使用0.0作爲浮點數的地方改變它。

總之,定義常量,一般,艾滋病主要在可維護性。

1

我定義它只有曾經有過一個機會RESET_TIME可能會是大於0.0不同,這樣就可以使一個變化和更新所有引用。否則0.0是我眼中更好的選擇,因此您不必追溯並查看RESET_TIME的定義。

+0

我可以看到你在做什麼,如果你把0.0,但它不告訴我爲什麼,你假設我知道什麼0.0意味着 - 並不總是新開發人員的情況。 – 2009-12-18 02:51:46

0

那麼假設RESET_TIME用於經常在你的代碼,你想改變的價值,這將更好地在每一次發言,並沒有這樣做。

-1

這段代碼沒問題。 const變量是不可更改的變量。所以每當你覺得重置的東西,你總是可以有你的常量做

7

那麼,在你的具體例子中,使用常量沒有什麼意義。但是,例如,如果RESET_TIME在將來會發生變化(即成爲1),那麼您應該使用一個常量。

如果你的意圖不明顯,你也應該使用一個常數。但在你的具體例子中,我認爲timeSinceWhatever = 0;timeSinceWhatever = RESET_TIME更清晰。

+0

完全不同意。代碼可讀性和可維護性是關鍵,尤其是當其他人可能需要維護時。這是一個很好的習慣,想着可能不知道這些神奇數字意味着什麼的人。 – 2009-12-18 02:53:57

2

如果您想更具體,讓別人知道你爲什麼改變做你可能想,而不是創建一個函數(如果你的語言功能允許浮動約),如

timeSinceWhenever = ResetStopWatch(); 
你在做什麼

或更好的是,當處理單位時,要麼找到一個內置函數類型的庫,要麼創建自己的函數庫。我不會建議隨着時間的推移創建你自己的,因爲這裏有大量的這樣的庫。我在代碼前看到了這一點,如果有幫助:

Temperature groundTemp = Temperature.AbsoluteZero(); 

這表明正在發生的事情的一個很好的方式。

0

好於常量,使其成爲配置變量,並將其設置爲默認值。但是,是的,RESET_TIME更具可讀性,只要使用不止一次,否則只需使用代碼註釋。

1

常量是可取的,因爲它允許使用可以在代碼的後續版本中更改的值。使用常量並不總是可行的,特別是如果您使用OO語言進行編程,並且不可能定義不包含基本數據類型的常量。通常,編程語言總是有一種方法來定義不可修改的對象/數據類型。