2013-08-02 71 views
0

如果該常量只與該函數的運行相關,那麼在函數內部聲明一個常量是否有內在錯誤?函數中聲明的常量,最佳實踐?

作爲一個簡單的例子,而不是做這樣的:

private const PROGRESS_BAR_MAX_VALUE:Number = 110; 

private function checkProgress():void 
{ 
    if(progress >= PROGRESS_BAR_MAX_VALUE) 
     { 
      do.something(); 
     } 
    } 

我會寫這樣的:

private function checkProgress():void 
{ 
    const MAX_VALUE:Number = 110; 

    if(progress >= MAX_VALUE) 
    { 
     do.something(); 
    } 
} 
+0

不夠公平。我只問,因爲我從來沒有想過要這樣做,直到我發現如果Scaleform碰到函數中聲明的常量時會拋出運行時錯誤。 – Glitcher

回答

1

沒有也絕對沒有錯。

應該使用CONST只要值永遠不會改變。這讓你的代碼更容易維護,甚至可以節省一點內存,我聽說過。

如果函數只在該函數的範圍內使用,則應該在函數中聲明一個變量。

所以,如果你正在創建一個永遠不會改變的變量,並且只能在一個函數中使用,你可以在你的函數中聲明const MAX_VALUE

3

兩個原因不申報函數內部常量:

  1. 通常常數是有意義的。即使你認爲它不會在函數之外使用,你可能是錯的。記住文本控件中那些愚蠢的mx_internal填充,這對於精確的文本測量和佈局來說是絕對必要的。 在實踐中將私人常數改爲公共是很常見的。如果您需要在相同的責任區域內實施其他實施方案,則可能會使用相同的常量。如果一個類以某種方式使用這個值,那麼外部類通常需要它來預測它的行爲。在你的情況下,這個值可能變成一個函數參數,在這種情況下,它應該被聲明爲一個具有默認值的參數,而不是一個常量。

  2. ActionScript通常不是人們學習的第一種編程語言,人們在使用ActionScript時主要還是要使用其他語言。人們期望在課堂水平上保持不變,而不是在功能水平上。所以,大多數人在功能中看到一個常數是令人困惑的。

此外,請確保您的值真的是一個常數。如果是標籤的某些文本,如果您必須添加本地化,​​該怎麼辦?如果它是一些延遲選項,如果他們需要從配置文件讀取它會怎麼樣?你的'進度條最大值'看起來不像一個常量。