建議113 宣告變數前考慮最大值

2021-07-22 12:41:08 字數 982 閱讀 5576

建議113:宣告變數前考慮最大值

假設正在開發乙個工資系統,其中乙個模組負責處理加薪。**如下:

static

void main(string

args)

", salary));

salary = (ushort)(salary + 1

); console.writeline(

string.format("

第二次加薪,工資總數:

", salary));

}

輸出的結果是:

第一次加薪,工資總數:65535

第二次加薪,工資總數:0

工資被清零了。

如果讓乙個剛入行的程式設計師來寫工資系統,他可能會給我們設計乙個ushort欄位來儲存月薪。65535元?夠多了,誰的月薪會超過這個數?當然,這裡舉的是乙個極端的例子。在這個例子中我們存在很多機會去修正這個bug。但是,即便是最有經驗的程式設計師,也會犯這種錯誤。在乙個千萬級的資料表中統計歷史資料,你認為某個欄位的求和極值會是多少?

上面的錯誤貌似愚蠢低階,可是一不留神,我們就可能掉入這樣的陷阱。所以應該始終在宣告變數時考慮最大值。

在c#中,如果要避免犯類似的錯誤,有乙個補救措施,那就是為運算加上checked關鍵字。在執行溢位的時候它會丟擲乙個異常:

static

void main(string

args)

", salary));

salary = (ushort)(salary + 1

); console.writeline(

string.format("

第二次加薪,工資總數:

", salary));}}

經過修正的**在執行到第二次加薪的時候,會丟擲system.overflowexception:算術運算導致溢位。

**:《編寫高質量**改善c#程式的157個建議》陸敏技

ES6宣告變數

var 命令會發生 變數提公升 現象,即變數可以在宣告之前使用,值為undefined let 宣告的變數僅在塊級作用域內有效 它所宣告的變數一定要在宣告後使用,否則報錯。const const的作用域與let命令相同 只在宣告所在的塊級作用域內有效。增加 刪除屬性都可以的 const b b.le...

VBS基礎篇 變數 1 宣告變數

顯式宣告 dim public private語句進行宣告 隱式宣告 不宣告直接使用 強制宣告 option explicit語句強制顯式宣告所有變數 使用隱式宣告方式的習慣不好,因為這樣有時會由於變數名拼錯而導致程式執行出現意外,因此,最好在每個指令碼開始第一行使用option explicit語...

12 5 1 宣告計算型別

12.5.1 宣告計算型別 清單 12.17 顯示了在 c 和 f 中的型別宣告。在 c 中,我們建立簡單的類,在 f 中,將使用乙個簡單的只有一種情況的差別聯合。listing 12.17 value of the computation in c and f c 的類是乙個簡單的不可變型別,儲存...