iT邦幫忙

DAY 2
3

程式設計心法系列 第 2

程式設計心法:1.資料型別--數字

資料型別?每一種程式語言都有資料型別啊!而且我寫程式也都有對變數宣告型別,這些我都嘛很注意!不會出錯的啦!

是的,今天開始我們要進入資料型別的單元。

宣告變數絕對是程式設計師的好習慣,但很多該注意的細節如果沒注意到,很可能編譯都過了,但是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 對於變數宣告的警告就做得很好,可以善用開發工具編譯時候的警告訊息,把該避開的地方先做好處理。

本系列文章


上一篇
程式設計心法:0.前言
下一篇
程式設計心法:2.資料型別--整數
系列文
程式設計心法31

1 則留言

0
海綿寶寶
iT邦大神 1 級 ‧ 2009-10-08 09:15:30

談到型別也有人常提到
strict/strong typing 和 loose typing

因為個人比較懶
所以比較偏好strict/strong typing
在compile階段就發現錯誤
要比runtime找不明不白的bug好多了

我要留言

立即登入留言