資料型別?每一種程式語言都有資料型別啊!而且我寫程式也都有對變數宣告型別,這些我都嘛很注意!不會出錯的啦!
是的,今天開始我們要進入資料型別的單元。
宣告變數絕對是程式設計師的好習慣,但很多該注意的細節如果沒注意到,很可能編譯都過了,但是Runtime 的時候卻出錯,可能您也搞不清楚問題發生在哪裡。所以這個單元,就是提醒程式設計師,對於變數的資料型別,應該要注意的地方。
一開始先對數字型別的通則,該注意的地方,做一些整理。
.避免使用魔術數字
什麼是魔術數字?(當然不是職棒總冠軍賽的魔術數字)
魔術數字指的是,在程式中突然出現,卻沒有任何解釋的數字。如:
for i=1 to 100
這 100 代表的是什麼意思?也許在寫程式的當下很清楚,可是日後再回頭來看時,鐵定想不起來是什麼意思。
可以用註解啊!是的,可以使用註解來說明,但是寫在程式中,當同一個數值,用在很多地方,要改變時,可能要花一點時間修改。
所以比較好的作法是:
for i=1 to MaxEntries
可以在程式一開頭的地方將 MaxEntries 設成 100,或勢將 MaxEntries 設成「常數」,再對MaxEntries 做進一步的解釋,這樣程式就容易懂得許多。
.預防 "Devided by Zero" 的窘境
每次使用到除式的時候,要記得檢查是否有除數為 0 的可能,最好是加上判斷或錯誤處理的程式碼。
例如:
x=a/b
當 b 為 0,則 Runtime 時就會產生 "Devided by Zero"。
所以可以先對可能發生 0 的狀況,先做判斷
if b=0 then
x=0
else
x=a/b
end if
.避免混合型別做比較
看下面這個例子:
if (i=x) then
如果 x 是浮點數,i 是整數,則上述的條件是可能會得到 false 的值(雖然兩個值是一樣的)。
所以最好先做好型別的轉換
if (i=cint(x)) then
當然,現在的 Compiler 可能會對這種情況作適當的處理,但好的習慣,是可以避免掉不經意的錯誤發生。
.留意 Compiler 的警告訊息
現在的開發工具,說真的都做得很好,像我本身常用的 Visual Studio 對於變數宣告的警告就做得很好,可以善用開發工具編譯時候的警告訊息,把該避開的地方先做好處理。
談到型別也有人常提到
strict/strong typing 和 loose typing
因為個人比較懶
所以比較偏好strict/strong typing
在compile階段就發現錯誤
要比runtime找不明不白的bug好多了