2014-02-28 79 views
0

我不是業餘程序員,但這個問題肯定聽起來有點業餘,這可能是因爲我通過實驗,教程以及來自論壇和stackoverflow的建議學習了編程。變量與簡單值的聲明

但是,我只是在考慮使用一些(javascript)代碼時,我在前些天使用簡單的數字實現了一些代數方程,我在那裏使用了一些代數方程 - 其中一些正在使用兩次或幾次,所以我做了我在類似情況下所做的事情。也就是說,我將它們放入代表它們的變量中,然後在需要的多個實例中使用它們。雖然,這可能是顯而易見的,沿着這個例子線的東西:

var two = 2; 
var seven = 7; 
var eighteen = 18; 

var calculate = (((seven * 140)/(seven + eighteen)) + ((eighteen * 50) + two) * two); 

現在我知道這個計算是沒有意義的,但它並不意味着任何意義,它只是我做了說明隨機計算我的觀點。

但我的問題是這是正確的?我的邏輯是爲什麼當我可以在一個變量中聲明它時,一次又一次地設置相同的值,然後讓它從內存中提供而不是重複給出。實際上,這個問題在我腦海中已經存在了很長一段時間,但我從來沒有想過要問這個問題有可能看起來有點愚蠢,但我只是決定我只想一勞永逸地知道一個確定的答案。例如,我記得很久以前曾與某人討論過這個話題,我不記得是誰,也許是某個html課堂上的老師,或者現在誰知道。但我記得那個人告訴我說,當涉及到這些簡單的值時,最好在那裏給出實際值,然後事先聲明它並從內存中調用它,因爲顯然,這個調用和讀取這個(或那些)變量(s)需要更多的處理,而不是在需要時重複設置。很明顯,複雜的值(比如我的「計算」變量)會在之前被更好地聲明和記住,但是對於簡單的值,這是我不能100%確定的地方。

正如我所說,這個問題在我腦海中已經有很長一段時間了,我只是想確切地知道事情的真相。我一直在JavaScript,jQuery,C#和T-SQL上很少使用這個概念(並不經常,只是在極少情況下)。

回答

0

不要做你在你的例子中顯示的東西。 不是在代碼中有「幻數」(如2,7和18),但如果要用宏常量或變量替換它們,請將它們命名爲它們的用途。這樣,如果由於某種原因必須更改某個值,則不會有值爲3的「two」!值「2」的「array_stride」可以毫無混淆地更改爲值3。

現在,關於將這些值放在一個常量宏量文字中還是將變量放在它們之外更好,很難給出明確的答案。這取決於編譯器是否能夠識別重複使用相同的常量值,並優化它只爲其分配一塊存儲。如果可以的話,你做什麼並不重要,因爲它會將值存儲在一個地方,並在需要的地方加載它(具有足夠的寄存器,可以將它保存在寄存器中,加載更快)。如果不能,你最好做一個變量。所以,也許它更好有一個完整的變量。

+0

嗯,我使用與該值相關的名稱,因爲它不像我這樣做很多,只有當需要出現時,以及當我這樣做時,它對於我的代碼的特定部分,而不是像一些重要的變量在整個大塊代碼中重複使用。我把它們命名爲相關價值,因爲在編寫代碼的時候,我想不出用簡單的方式把它的目的變成實際的單詞,所以對我來說,快速的方法是僅僅命名它的相關價值,如果我更改值 - 我有 - 我也更改名稱以匹配新的值。而且... – AspCoder

+0

而且,我感謝你對我的問題核心的詳細解答。但是,你說這取決於編譯器,並且我已經在我的問題的底部說過我已經用javascript,jQuery,C#和T-SQL(用於SQL Server)完成了此操作。所以,我明白你在答案中說了什麼,但你的答案是通用的,它取決於正在使用的編譯器。由於我解釋了我使用的代碼類型,編譯器當然也很明顯。現在,我知道你 - 菲爾佩裏在這個問題上所說的話,我希望別人或者菲爾佩裏 - 請擴展他所說的話,並且...... – AspCoder

+0

有什麼意義,如果你必須經過你的代碼並將所有**兩個**更改爲**三個**?你可能只是在代碼中留下魔法數字。你永遠不會因爲這個原因而將它命名爲「兩」。您將其命名爲「array_stride」或其意思,並使用它。 –