读书笔记_代码大全_第14章_组织直线型代码_第15章_使用条件语句
組織直線型代碼 + 使用條件語句
希望我的讀書筆試能帶你翻過18頁的書?http://www.cnblogs.com/jerry19880126/
《代碼大全》第14章和第15章的內(nèi)容比較少,這里就寫在一起了。首先看第14章——組織直線型代碼,本章主要講了兩個知識點。
第一個知識點是怎樣書寫出有明確順序的代碼,以書上的例子來說:
1 data = ReadData(); 2 results = CalculateResultsFromData(data); 3 PrintResults(results);這三行代碼具有鮮明的時間順序,即前一條語句的輸出是后一條語句的輸入。
但如果是這樣的代碼:
1 ComputeMarketingExpense(); 2 ComputeSalesExpense(); 3 CompusteTravelExpese(); 4 DisplayExpensesSummary();第四句能明顯看出放在最后,但前三句就看不出明顯的先后順序,如果我們試圖把變量初始化放在第一句ComputeMarketingExpense()中,那就容易出問題了,假設(shè)你是這段代碼的作者,可能不會認(rèn)為有問題,只要自己記得先執(zhí)行ComputeMarketingExpense()就行了,但萬一這段代碼交由另一名程序員維護呢?萬一他想調(diào)換一下順序呢?有明確順序要求的代碼應(yīng)當(dāng)有所體現(xiàn)!
一種方法是添加注釋,但這不是最好的方法,代碼的最高境界是具有自明性(別的程序員一眼就能看出這段代碼是干什么的),所以要是想對變量初始化,可以單獨寫一個函數(shù),如:
1 InitializeExpenseData(expenseData); 2 ComputeMarketingExpense(); 3 …這樣代碼的維護人員就知道哪一句話應(yīng)該最先執(zhí)行了,但這里要注意一下,InitializeExpenseData()的參數(shù)應(yīng)該為指針或引用,不然無法有效地做到變量的初始化。
?
第二個知識點是有效地組織順序無關(guān)的語句,還是以書上的例子來說明:
1 MarketingData marketingData; 2 SalesData salesData; 3 TravelData travelData; 4 5 travelData.ComputeQuarterly(); 6 salesData.ComputeQuarterly(); 7 marketingData.ComputeQuarterly(); 8 9 salesData.ComputeAnnual(); 10 marketingData.ComputeAnnual(); 11 travelData.ComputeAnnual(); 12 13 salesData.Print(); 14 travelData.Print(); 15 marketingData.Print();這樣看上去是不是有些亂?雖然每段都執(zhí)行相同的操作,但發(fā)起對象的排列順序卻是不一致的,不熟悉代碼的人,看到你寫的每一句話,都會往前查看對象的定義。但如果這樣分組:
1 MarketingData marketingData; 2 marketingData.ComputeQuarterly(); 3 marketingData.ComputeAnnual(); 4 marketingData.Print(); 5 6 SalesData.salesData; 7 salesData.ComputerQuarterly(); 8 salesData.ComputerAnnual(); 9 salesData.Print(); 10 11 …這樣就清楚多了,也符合“不要讓變量出生太早”的原則,使其生存時間盡量短,這樣我們的精力會更集中。
?
第15章介紹條件語句,if…else 和 switch語句,入手很簡單,但有一些需要注意的地方。比如if和else里的語句順序有沒有關(guān)系,比如檢測輸入是字符還是標(biāo)點符號,是
if(輸入的是字符)
{…}
else if(輸入的是標(biāo)點)
{…}
比較好,還是
if(輸入的是標(biāo)點)
{…}
else if(輸入的是字符)
{…}
比較好呢?
看似差不多,但其實第一種寫法更好,因為字符出現(xiàn)的概率更大。如果出現(xiàn)的是字符的話,采用第一種寫法,只要經(jīng)過第一個if語句的判斷就可以了,但如果采用第二種寫法,則需要經(jīng)過兩個if語句的判斷才可以。所以把出現(xiàn)概率大的判斷放在前面要好!
另外,要確保所有的情況都考慮到了,還是上面的那個例子,萬一輸入的既不是字符也不是標(biāo)點怎么辦?欠考慮的情況會引發(fā)程序的崩潰!所以最佳的寫法是:
if(輸入的是字符)
{…}
else if(輸入的是標(biāo)點)
{…}
else
{…}
在最后的else語句中寫上沒有考慮到的情況,通常是錯誤的代號,以及對用戶的提示,如“請致電XXX,我們?nèi)ケM快為您解決問題”。類似地,在switch語句中,不要忘了default。
最后,不要在if語句中使用switch,也不要在switch中冒出if語句,這樣的混用結(jié)構(gòu)很糟糕!同時也不要為了迎合switch的輸入要求(只能是整型、枚舉、字符型和布爾),而寫出下面的代碼:
action = userCommand[0]; // 太可怕了,只提取了用戶輸入單詞的第一個字符 switch(action) { case ‘c’: Copy(); break; case ‘d’: Delete(); break; … }用戶輸入copy時,當(dāng)然調(diào)用Copy()了,但萬一用戶輸入的是chello等亂七八糟的單詞,也會導(dǎo)致Copy()的調(diào)用,這可不行,這種情況就不要用switch(因為switch不支持字符串的Case),就用if(userCommand.equals(“…”)) else if(…)…來代替,注意字符串的比較用strcmp,strncmp等函數(shù),或者自己寫一個equals()函數(shù),但千萬不要用==號。
<end>
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/jerry19880126/archive/2012/12/23/2829926.html
總結(jié)
以上是生活随笔為你收集整理的读书笔记_代码大全_第14章_组织直线型代码_第15章_使用条件语句的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DWR+Spring配置使用
- 下一篇: phoneGap工程的创建