![15個編程好習慣.doc_第1頁](http://file.renrendoc.com/FileRoot1/2020-1/19/85385d3c-7405-4678-a0e8-9442c62c690d/85385d3c-7405-4678-a0e8-9442c62c690d1.gif)
![15個編程好習慣.doc_第2頁](http://file.renrendoc.com/FileRoot1/2020-1/19/85385d3c-7405-4678-a0e8-9442c62c690d/85385d3c-7405-4678-a0e8-9442c62c690d2.gif)
![15個編程好習慣.doc_第3頁](http://file.renrendoc.com/FileRoot1/2020-1/19/85385d3c-7405-4678-a0e8-9442c62c690d/85385d3c-7405-4678-a0e8-9442c62c690d3.gif)
![15個編程好習慣.doc_第4頁](http://file.renrendoc.com/FileRoot1/2020-1/19/85385d3c-7405-4678-a0e8-9442c62c690d/85385d3c-7405-4678-a0e8-9442c62c690d4.gif)
免費預覽已結(jié)束,剩余1頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
15個編程好習慣編者按:這是國外程序員Al katib總結(jié)的一些編程習慣。1. 動手編碼之前,你需要對要編碼實現(xiàn)的解決方案有一個正式的或粗略的設計。永遠不要在沒有任何設計的前提下就開始編碼,除非所編代碼不重要。2. 優(yōu)秀的代碼文檔跟編程語言知識一樣重要。在代碼源文件中,為每個主要的代碼段添加注釋,解釋代碼的基本邏輯。最好注明程序的構(gòu)建和修改日期,以及修改的原因也是非常有必要的。3. 維護程序的各個版本同樣重要。當前有些編程工具都自帶一個版本管理工具。無論你什么時候改變自己的程序,它們都會將其保存為.bak文件。我的方法是為每個程序維護三個不同的版本。比如說,我有一個名為program.c的文件,這個文件同時也被其他項目組成員使用。我把這個文件復制為program.c.old作為備份文件,并且當我修改時,我會備份另一個名為program.c.wrk的副本文件。當成功完成修改時替換program.c.wrk文件。你還可以給自己的程序版本添加一個日期或一些注釋,像program260505.c或programReadFnWrking.c。4. 如果工程包含多個源文件,則創(chuàng)建一個README文件,注明每個源文件、數(shù)據(jù)文件、臨時文件以及日志文件(如果有的話)的作用。你還可以注明編譯和運行步驟。5. 有時候,你一定想知道為什么IF語句沒有得到預想的結(jié)果??赡苣闶褂玫氖堑忍?,也就是“=”,而不是條件判定符號“=”。一個比較好的辦法是用相反的順序?qū)憲l件語句。因此,你的條件語句應該如下:if(10=i)因此,如果你錯誤地寫成了單個等于號,在編譯的時候也能檢查出來并報錯。6.使用循環(huán)和條件語句時,先把左右括號對應起來,然后再在里面寫其他語句。也就是:代碼:1 for(int i=0;i10;i+) 2 4 printf(“i=%dn”,i); 3 注:每一行開頭的數(shù)字表明寫循環(huán)代碼的順序。7. 避免使用幻數(shù)(magic numbers)。例如,不要寫代碼:circleArea = 3.14 * pow(radius,2);而要使用如下代碼:代碼:#define PI 3.14 circleArea = PI * pow(radius,2);8. 使用有意義的變量和函數(shù)名稱。例如,使用radius來代替圓的半徑,而不是用r來表示。同樣,函數(shù)名calculateArea要比其他任何隱晦的縮寫要好得多。匆忙之下,我們也許會使用縮寫的變量名,但一開始節(jié)省時間的話,之后會浪費更多的時間,去猜測縮寫變量名代表什么。(編注:)9. 為后面的調(diào)試使用打印語句,這是個好習慣。但是,當完成最后代碼后,去掉這些語句,有時也是一項危險的任務。添加一個方法,用于輸出調(diào)試信息。當最終版本生成時,只要把這個方法注釋掉就行。因此,只在一個地方做修改就可以了。10. 代碼編寫完之后,開始優(yōu)化代碼。之前聲明的一些變量,現(xiàn)在可能沒用了。同樣,并不依賴循環(huán)的一些聲明可以移到循環(huán)模塊之外去。扎實的編譯知識同樣會對以后的代碼優(yōu)化有所幫助。11. 對自己的操作系統(tǒng)和硬件要有足夠的了解,你可以從資源占用等方面提升程序的性能。12. 編寫代碼時要合理使用縮進,以使代碼清晰可讀。13. 把項目文件放到SOURCE、HEADERS、MAKE、EXES等不同的文件夾中。14. 研究別人編寫的代碼。這可以讓你學習到新的編程技術(shù),以及他們解決和你相同的任務時所使用的方法。15. 最后一條(但不是最不重要的一條),備份源代碼文件,這樣當硬盤出錯或相同的問題發(fā)生時,不至于前功盡棄。附加:補充一條,堅持使用一種命名模式。如果你打算用匈牙利命名法,那就堅持并廣泛使用,否則將適得其反。參見微軟資深工程師 Eric Lippert 的這篇文章閱讀代碼不簡單。編者后話編程的好習慣應不止這15條,也許您不認同上文中的某些觀點,請標出相應序號,并說明其不足之處。另外,非常歡迎大家補充分享您的好習慣。附文:微軟資深軟件工程師:閱讀代碼真的很難為這篇文章評分窗體頂端窗體底端0 評論發(fā)表人:關關發(fā)表時間:2011-01-07 11:48 AM編者按:原文作者Eric Lippert是一名資深軟件設計工程師,從1996年起一直在微軟開發(fā)部門任職,協(xié)助設計并實現(xiàn)VBScript、JScript、JScript .NET、Windows Script Host、Visual Studio Tools for Office 和 C#。Escalation的工程師JeremyK在他博客中問到:你是怎么教人們快速深入挖掘不熟悉的代碼(不是自己所寫的)?我學習如何編程的方法很傳統(tǒng) 自己動手編碼。但我現(xiàn)在很糾結(jié):到底是集中精神閱讀源碼,還是自己編寫。對我而言,似乎唯一有效的方法就是自己寫過。不是和Jeremy開玩笑,寫代碼的確沒有讀代碼難。首先,我同意你的看法,幾乎很少有人能讀代碼但不會寫代碼。這不像自然書面語或口語,理解他人的意思并不需要去理解他們?yōu)槭裁匆菢诱f。比如,如果我說:“寫代碼有兩種方式:一種嚴格且詳細,另一種模糊且草率。前者生成簡潔分層的婚禮蛋糕,后者卻是意大利面條?!鄙厦孢@句話產(chǎn)生一個平衡且幽默的效果,但即使聽眾和讀者不理解我使用“零照應”和“并列句”這樣的文字技巧,也會理解我要說的意思。但是說到代碼,既要從代碼本身中理解代碼作者的意圖,又要理解代碼產(chǎn)生的預計效果,這兩者都極為重要。因此,我又回到那個問題了,有些人需要快速切入代碼,但不需要動手寫代碼,那我們?nèi)绾尉帉戇m合這些人的代碼?下面是我在編寫代碼時,盡力去做的事,目的就是使其他人能輕松閱讀: 使代碼遵從工具。Object Browsers和Intellisense雖然很好,但我告訴你,我是守舊派。如果找不到我想要的,我會不高興。什么使得代碼成為可查詢的呢? 像i這樣的變量名不好。如果沒有明確的錯誤提示,你就無法輕易查找代碼。 避免使用是其他名字前綴的名字。比如,在代碼中有個“perfExecuteManifest”,如果再有一個“perfExecuteManifestInitialize”,這就會讓我抓狂,因為每次在源碼中查詢前者時,我不得不費力地過濾掉后者所有的實例。 “臨時傳遞數(shù)據(jù)”(tramp data)應使用相同的名字。所謂“臨時傳遞數(shù)據(jù)”(tramp data),就是指那些傳遞給方法A的變量,還要傳給方法B的變量。這兩類變量實際上是相同的,所以如果它們有著相同的名字,則更好。 別用宏來重命名東西。如果有個方法叫g(shù)et_MousePosition,那別這樣GETTER(MousePosition)來聲明該方法。因為我會找不到實際的方法名。 Shadowing會引起很多問題,請不要用它。 堅持使用一種命名模式。如果你打算用匈牙利命名法,那就堅持并廣泛使用,否則將適得其反。使用匈牙利命名法來記錄數(shù)據(jù),而不是存儲類型;記錄普遍事實,而不是臨時條件。 使用斷言來記錄先決條件(preconditions)和后置條件(postconditions)。 別縮寫英文單詞。確切來說,別縮寫成稀奇古怪的形式。在腳本引擎中,有個變量名叫“NME”,這讓我非常抓狂!它應當叫“VariableName”。 C語言標準運行時庫的設計不是很優(yōu)秀。別去效仿它。 別寫“聰明”的代碼;當代碼出現(xiàn)問題,維護代碼的程序員沒時間去理解你的聰慧。(編注:這條建議即為:編寫可維護的代碼,詳情可參見明星軟件工程師的10種特質(zhì)中的第8點。) 理解編程語言特性的設計初衷,使用這些特性去做它們適合完成的工作,而不是它們能做到的工作。例如:別把異常當做一般的流控制機制來使用(即便你能做到),而應該用它們來報告錯誤。別強制把接口指針轉(zhuǎn)換成類指針,即便你知道這樣沒問題。 按功能單元劃分源碼樹,而不是按組織結(jié)構(gòu)。比如:我目前所在團隊中,有2個根子目錄的名字是“Frameworks”和“Integration”,這是兩個團隊的名字。不巧的是,F(xiàn)rameworks團隊名下有一個叫“Adaptor”的子目錄,而“Adaptor”卻是Integration的子目錄,這就非常令人迷惑。同理,(如果)有著相同子目錄的不同的子樹,有些是客戶端的組件,有些是服務端的組件;有些是管理組件,有些是非管理組件;有些是處理型組件,有些是非處理型組件;有些是零售組件,有些內(nèi)部測試工具。這就會亂七八糟的。當然,我實際上根本沒有回答Jeremy的問題如何調(diào)試不是我寫的代碼?這取決于我的目的。如果我只是因為一個bug,而深挖一段具體的代碼,我會在調(diào)試器中逐步跟蹤所有代碼,寫下我“走過”的調(diào)用分支,記錄下哪些方法是特定數(shù)據(jù)結(jié)構(gòu)的“生產(chǎn)者”,哪些方法是“消費者”;我也會仔細盯著輸出窗口,查看出現(xiàn)的有用信息;還要打開異常
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 年產(chǎn)3萬臺新能源汽車電機及1500臺風力發(fā)電機配套沖片項目可行性研究報告寫作模板-申批備案
- 2025-2030全球?qū)ΨQ槳行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球高速塑料理瓶機行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球磨削數(shù)控系統(tǒng)行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國智能體測一體機行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球活細胞代謝分析儀行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球臨床試驗實驗室服務行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國生命科學智能制造服務行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球無人機基礎設施檢查行業(yè)調(diào)研及趨勢分析報告
- 代辦服務合同
- 2025年中國南方航空股份有限公司招聘筆試參考題庫含答案解析
- 商務部發(fā)布《中國再生資源回收行業(yè)發(fā)展報告(2024)》
- 山東省濟南市2024-2024學年高三上學期1月期末考試 地理 含答案
- 2025年福建新華發(fā)行(集團)限責任公司校園招聘高頻重點提升(共500題)附帶答案詳解
- 江蘇省駕??荚嚳颇恳豢荚囶}庫
- 四川省成都市青羊區(qū)成都市石室聯(lián)合中學2023-2024學年七上期末數(shù)學試題(解析版)
- 咨詢公司績效工資分配實施方案
- 2025新人教版英語七年級下單詞表
- 注塑成型工藝流程圖
- 廣東省緊密型縣域醫(yī)療衛(wèi)生共同體雙向轉(zhuǎn)診運行指南
- 檢驗科臨檢組風險評估報告文書
評論
0/150
提交評論