建議113:宣告變數前考慮最大值
假設正在開發乙個工資系統,其中乙個模組負責處理加薪。**如下:
static輸出的結果是:void main(string
args)
", salary));
salary = (ushort)(salary + 1
); console.writeline(
string.format("
第二次加薪,工資總數:
", salary));
}
第一次加薪,工資總數:65535
第二次加薪,工資總數:0
工資被清零了。
如果讓乙個剛入行的程式設計師來寫工資系統,他可能會給我們設計乙個ushort欄位來儲存月薪。65535元?夠多了,誰的月薪會超過這個數?當然,這裡舉的是乙個極端的例子。在這個例子中我們存在很多機會去修正這個bug。但是,即便是最有經驗的程式設計師,也會犯這種錯誤。在乙個千萬級的資料表中統計歷史資料,你認為某個欄位的求和極值會是多少?
上面的錯誤貌似愚蠢低階,可是一不留神,我們就可能掉入這樣的陷阱。所以應該始終在宣告變數時考慮最大值。
在c#中,如果要避免犯類似的錯誤,有乙個補救措施,那就是為運算加上checked關鍵字。在執行溢位的時候它會丟擲乙個異常:
static經過修正的**在執行到第二次加薪的時候,會丟擲system.overflowexception:算術運算導致溢位。void main(string
args)
", salary));
salary = (ushort)(salary + 1
); console.writeline(
string.format("
第二次加薪,工資總數:
", salary));}}
**:《編寫高質量**改善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 的類是乙個簡單的不可變型別,儲存...