2007年12月10日 星期一

軟體建構之道 (Code Complete) 第二版 第十二章到第十三章心得

軟體建構之道
第十二章-主要資料型別
本章在說明使用 int, float, ... 這些資料型別的注意事項..
很多小重點..
我只紀錄一下對我寫程式比較有幫助的..
有需要自己去書店翻一下..

使用布林變數簡化複雜的測試..

if ((eatBreakfast() && eatLunch() && eatDinner()) || (hasHeadache() || hasStomachache()))
{
}

上面看完應該眼睛都花了..
你應該開始會想 "我會在需要的時候弄懂這段程式碼在做啥" ..
其實我上面例子想表達的是..
如果 三餐都有吃 或者 身體哪裡不舒服 的話再去做區塊內的事..
而不改寫成..

boolean eatMeals = ((eatBreakfast() && eatLunch() && eatDinner());
boolean isSicked = (hasHeadache() || hasStomachache());

if (eatMeals || isSicked)
{
}

這樣不就清楚多了..

避免常值即便是安全的常值..
就算你知道打籃球最多同時上場 5 個人..
程式碼中最好還是使用 具名常數 來取代 5..

private int final MAX_PLAYERS_COUNT = 5;
...
public void checkPlayerOnCourt(int inPlayerOnCourt)
{
  if (inPlayerOnCourt > MAX_PLAYERS_COUNT)
  {
    // 判技術犯規.
  }
}

另外這樣你程式中也避免掉到處都有 "5" 這個魔術數字的問題..

如果是多維陣列請考慮用比 i 和 j 更有意義的名稱..
比如 Array[i][j][k] 考慮改成 Array[長][寬][高] 之類的..
要不改成 Array[ptrX][ptrY][ptrZ] 也比較不會弄錯(但還是不夠好)..
總之轉成現實中對應的物件而不是電腦程式的術語..

第十三章-異常資料型別
本章比較著墨在 結構 和 指標 上面..
我總覺得 JAVA 的 類別 就含蓋掉 結構 的部份了..
另外寫 JAVA 也不會處理到指標.. Orz
不過我還是乖乖看完了..

使用結構簡化參數清單..
直接拿書上例子..

addEmployeeData(name, address, phone, ssn, gender, salary)

如果我們直接包裝出一個員工結構(員工包含 name, address, ...)..
那這一大串參數就可以變成..

addEmployeeData(employee) // 參數簡化成一個員工結構.

這樣做的優點有..
1. 不用去記參數的順序..
2. 之後若參數增減也不用修改常式的參數介面(當然還是要修改常式裡的程式碼)..
缺點則是..
1. 增加耦合度..
之後要使用到此常式也必須知道 員工結構 這個東西..
所以結論是..
程式設計師要自行判斷哪種情況適合 建立新的結構來簡化參數清單 ..
用到的參數數目夠多 -> 直接傳入結構
用到的參數數目少 -> 直接傳入基本資料型別的參數

使用抽象概念層級來存取指標..

node = node.next <-> account = NextAccount(account)
event = eventQueue[queueFront] <-> event = HighestPriorityEvent()

右邊的作法 將原本的程式碼抽像化成一個常式..
對我來說..
比較好閱讀..
且可以重複利用常式 而不是 到處都看到 event = eventQueue[queueFront] 這種東西..

這兩章..
我看得有點辛苦.. Orz

0 則回應:

Related Posts Plugin for WordPress, Blogger...