日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

读书笔记_代码大全_第14章_组织直线型代码_第15章_使用条件语句

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读书笔记_代码大全_第14章_组织直线型代码_第15章_使用条件语句 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

組織直線型代碼 + 使用條件語句

希望我的讀書筆試能帶你翻過18頁的書?http://www.cnblogs.com/jerry19880126/

《代碼大全》第14章和第15章的內容比較少,這里就寫在一起了。首先看第14章——組織直線型代碼,本章主要講了兩個知識點。

第一個知識點是怎樣書寫出有明確順序的代碼,以書上的例子來說:

1 data = ReadData(); 2 results = CalculateResultsFromData(data); 3 PrintResults(results);

這三行代碼具有鮮明的時間順序,即前一條語句的輸出是后一條語句的輸入。

但如果是這樣的代碼:

1 ComputeMarketingExpense(); 2 ComputeSalesExpense(); 3 CompusteTravelExpese(); 4 DisplayExpensesSummary();

第四句能明顯看出放在最后,但前三句就看不出明顯的先后順序,如果我們試圖把變量初始化放在第一句ComputeMarketingExpense()中,那就容易出問題了,假設你是這段代碼的作者,可能不會認為有問題,只要自己記得先執行ComputeMarketingExpense()就行了,但萬一這段代碼交由另一名程序員維護呢?萬一他想調換一下順序呢?有明確順序要求的代碼應當有所體現!

一種方法是添加注釋,但這不是最好的方法,代碼的最高境界是具有自明性(別的程序員一眼就能看出這段代碼是干什么的),所以要是想對變量初始化,可以單獨寫一個函數,如:

1 InitializeExpenseData(expenseData); 2 ComputeMarketingExpense(); 3

這樣代碼的維護人員就知道哪一句話應該最先執行了,但這里要注意一下,InitializeExpenseData()的參數應該為指針或引用,不然無法有效地做到變量的初始化。

?

第二個知識點是有效地組織順序無關的語句,還是以書上的例子來說明:

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();

這樣看上去是不是有些亂?雖然每段都執行相同的操作,但發起對象的排列順序卻是不一致的,不熟悉代碼的人,看到你寫的每一句話,都會往前查看對象的定義。但如果這樣分組:

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里的語句順序有沒有關系,比如檢測輸入是字符還是標點符號,是

if(輸入的是字符)

{…}

else if(輸入的是標點)

{…}

比較好,還是

if(輸入的是標點)

{…}

else if(輸入的是字符)

{…}

比較好呢?

看似差不多,但其實第一種寫法更好,因為字符出現的概率更大。如果出現的是字符的話,采用第一種寫法,只要經過第一個if語句的判斷就可以了,但如果采用第二種寫法,則需要經過兩個if語句的判斷才可以。所以把出現概率大的判斷放在前面要好!

另外,要確保所有的情況都考慮到了,還是上面的那個例子,萬一輸入的既不是字符也不是標點怎么辦?欠考慮的情況會引發程序的崩潰!所以最佳的寫法是:

if(輸入的是字符)

{…}

else if(輸入的是標點)

{…}

else

{…}

在最后的else語句中寫上沒有考慮到的情況,通常是錯誤的代號,以及對用戶的提示,如“請致電XXX,我們去盡快為您解決問題”。類似地,在switch語句中,不要忘了default。

最后,不要在if語句中使用switch,也不要在switch中冒出if語句,這樣的混用結構很糟糕!同時也不要為了迎合switch的輸入要求(只能是整型、枚舉、字符型和布爾),而寫出下面的代碼:

action = userCommand[0]; // 太可怕了,只提取了用戶輸入單詞的第一個字符 switch(action) { case ‘c’: Copy(); break; case ‘d’: Delete(); break; … }

用戶輸入copy時,當然調用Copy()了,但萬一用戶輸入的是chello等亂七八糟的單詞,也會導致Copy()的調用,這可不行,這種情況就不要用switch(因為switch不支持字符串的Case),就用if(userCommand.equals(“…”)) else if(…)…來代替,注意字符串的比較用strcmp,strncmp等函數,或者自己寫一個equals()函數,但千萬不要用==號。

<end>

?

?

轉載于:https://www.cnblogs.com/jerry19880126/archive/2012/12/23/2829926.html

總結

以上是生活随笔為你收集整理的读书笔记_代码大全_第14章_组织直线型代码_第15章_使用条件语句的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。