導航:首頁 > 程序命令 > 程序員怎麼寫一手好的代碼

程序員怎麼寫一手好的代碼

發布時間:2022-08-20 22:10:58

程序員如何寫出更好的程序代碼

Martin Thompson是java Champion稱號獲得者,同時也是一名高性能計算科學家。他說,為了寫出更好的代碼,程序員需要運用基本設計原則,閱讀已有代碼。在QCon London 2016大會上,他做了題為「挖掘你的工程師屬性(Engineering You)」的演講。InfoQ在會後采訪了他,內容涉及軟體行業面臨的挑戰及程序員如何應對那些挑戰成為更好的軟體工程師。
軟體開發面臨的其中一個最大的挑戰就是處理應用程序規模增長帶來的復雜性。對象、組件、模塊或系統之間的耦合程度越高,我們需要承擔的後果就越多。這些後果包括但不限於修改困難、故障蔓延、由於爭用而無法擴展、由於關聯操作而導致的性能問題。時間、空間和實現上的松耦合對於擴展性和彈性而言至關重要。「共生性(Connascence)」可以很好地描述耦合,一個模塊/組件的變化會導致另一個模塊/組件的變化。
我發現,內聚比耦合更微妙。我喜歡將內聚理解為統一性。當我們考慮在不同的方面使用同一個組件時,就失去了統一性,這會導致不必要的行為和特徵。軟體設計中的低內聚常常是一個很好的需求或團隊狀況指標。通常,內聚設計很容易跟蹤,由於相關的函數和特性都進行了分組,相互關聯,所以可發現性很高。
如果我們希望成為更好的軟體工程師,那麼提高我們運用基本設計原則的技能應該成為我們日常活動的核心。在訓練和實踐中不斷重復是讓技能成為第二天性的最好方法。

㈡ 怎樣才能寫出優秀的代碼

數據結構和核心演算法低水平程序員總在考慮代碼,高水平程序員總在考慮數據結構及其之間的關系。數據結構考慮清楚了,核心的演算法自然就出來了,這就是關於每個類的每個方法如何實現的問題。比如需要實現一個中位數查詢方法,如果你前面確定了數據保存的格式是一個列表,那麼你可以考慮採用插入排序法;如果數據格式是自平衡二叉排序樹(AVL),則只需直接返回根節點就可以了。數據結構決定演算法,所以你在考慮數據結構的時候,一定要盡可能地使數據的結構和它的自然屬性相匹配,不然後面的實現就會是一場噩夢。 功能實現思路確定後,實現過程也需要大量的構思活動。碰到你比較熟悉有經驗的領域,你自然可以輕車熟路,但難免會有一些你不太熟悉的技術需要嘗試。作為一個程序員,最大的挑戰也是最大的樂趣所在,就是不斷學習新的技術,沒有這樣的心態,很快就會落後。 那麼遇到不熟悉的技術怎麼辦?光谷校區專業老師建議,先不要急著實現項目中的代碼,自己另外維護一個測試項目,在里邊邊查文檔邊學習,邊做一個小功能,把 所有需要在項目中實現的功能先在測試項目里跑通,然後再寫項目里的代碼。這樣做的好處是把單個技術問題和其他潛在的bug隔離開來,便於快速學習新技術。 否則,你直接在項目里寫代碼出錯以後,要判斷問題的源頭都要多費好幾倍的精力。 測試測試很重要,設計測試用例就像開發時設計數據結構一樣,也是很關鍵的。在設計測試用例的時候,要把當時自己設計數據結構的思路全部忘掉,或者找別人來設計測試用例,不然會不由自主地測試那些你已經考慮到了的地方。這樣測試是跑通了,用戶一用起來可能各種邊界條件會到處出問題。有人會推崇TDD的方法,先設計好測試用例,然後在開發過程中確保所有測試通過。從開發質量管理和長期維護的角度來說TDD是很有必要的,但把它擺到驅動開發的高度,就有點本末倒置了。 代碼可讀性。代碼的可讀性一定要好,要做到一年後甚至幾年後你拿到自己寫的代碼,還能很容易看明白當時的思路和實現。這就涉及到命名和注釋的問題。命名就像超市裡的商品標簽一樣,要讓看得人一目瞭然就知道這是個什麼東西,注釋也是很重要的,它可以用來說明一段代碼的作用,演算法的設計思想,或者是方法調用的參數格式要求等。所以,在重要或者復雜的地方,都需要詳細地寫一些注釋,便於看代碼的人清晰地了解你的思路。 綜上所述,要想寫出自己滿意的代碼,首先不要急於動手,要先仔細想清楚思路性的東西,尤其是數據結構,然後在實現過程中大膽嘗試小心驗證,設計好測試用例,確保代碼的可讀性,就可以在代碼中表現出自己的最高水平。最後,建議所有的學員不光要注重提高技術水平,更要從一開始就養成良好的編程習慣,這會讓你在以後的工作中事半功倍。

㈢ IT培訓分享做java軟體工程師,怎樣才能寫出好的代碼

Java代碼之於java程序員而言就是左膀右臂,java代碼寫的好的java程序員明顯更是企業的歡迎,一個優秀的java程序員的考核標准之一也是看他的編程水平。

其實有的java程序員java代碼會受到大家的追捧,是因為他在寫代碼時注意的細節往往多於那些不怎麼關注java代碼編程細節的程序員,俗話說:「細節決定成敗」,那麼如何寫出好的java代碼呢?IT培訓http://www.kmbdqn.com/介紹一起來討論下:

1. 重視注釋

有的java程序員在寫代碼時,從來沒有想過要在java代碼後加上相關的注釋,甚至是上萬行的代碼也沒有想過加上注釋,這就存在很大的問題,不說你的代碼會跟其他人分享討論,就你自己回顧你是怎麼寫好這篇代碼的,你也是半天無法理出頭緒,這就為維護和修改等等工作添加了很大的麻煩。所以,要想寫出好的java代碼,一定從簡短的java代碼編寫開始注重在java代碼後面加上相應的注釋,養成良好的習慣。

2. 重視排版整潔

看很多java程序員的排版總覺得在欣賞一幅藝術品,但是看到一些java程序員的排版卻總覺得無力吐槽。同樣是編寫代碼,但是給人的視覺體驗是相當的不同,當然好的java代碼給人的享受也是美的,所以要想寫出好的代碼,一定要重視排版整潔。

3. 注重命名規則

現在在一個團隊開發中,都會提前定製一個統一的命名規則,這樣利於提高工作效益。但是很多java程序員是缺乏這個意識的,每次敲代碼,更喜歡按照自己慣常的方式老命名模塊、函數,這樣是方便了自己,但是忽視團隊協作,所以在日常工作中,特別是團隊工作中一定要重視命名規則。

4. 養成備份習慣

備份的重要性不用小編強調,相必你也知道。但是有的java程序員就是沒有養成這樣的好習慣,每次敲完代碼就不記得隨手保存,每次等到除了事故,比如電腦出了故障,辛辛苦苦敲打的java代碼沒保存找不回來的情況下就開始懊惱,與其這樣還不如在一開始就養成良好的備份習慣,這樣也方便自己日後查找利用。


㈣ 優秀Java程序員都是怎樣寫代碼的

1.編碼之前想一想
用10分鍾,20分鍾甚至30分鍾的時間來想想你需要什麼,想想什麼樣的設計模式適合你將要編碼的東西。你會很慶幸「浪費」了那幾分鍾,當你不得不更改或添加東西到代碼中時你就不將將浪費幾分鍾而是要花費更多的時間。
2.注釋你的代碼
說真的,沒有什麼比兩個月後檢查自己的代碼,卻不記得它用來干什麼更糟糕的了。注釋所有重要的內容,當然那些顯而易見的就免了吧。
3.寫干凈的代碼
錯落有致。使用空格。根據功能模塊化你的代碼。閱讀RobertC.Martin寫的《CleanCode》,非常有幫助。此外,遵循代碼約定/標准(如,尤其如果是共享的代碼。
4.重構
沒有人喜歡用那些超級長的方法。這通常(幾乎總是)意味著你混雜了功能。用更易於管理的方法分離代碼。還能使得代碼更可重用。
5.不要復制粘貼代碼
如果你有兩個或兩個以上相同的代碼塊,那麼你可能做錯了什麼。閱讀第4條。
6.使用有意義的名稱
雖然命名int變數為「elligent」或char為「mander」是很好笑;但是,這樣的名稱並不能說明變數是用來做什麼的。
7.測試代碼
測試,測試,測試,還是測試。測試你的代碼。不要等到已經做完程序之後再來測試,否則當你發現一個巨大的bug,卻不知道它來自於哪裡來的時候,你會追悔莫及。
自動化測試通常都是有價值的。它還有助於節省大量重測試和回歸測試的時間。

㈤ 如何編寫高質量的代碼!

載選<編程思想>

非程序員 編 著

代碼永遠會有BUG,在這方面沒有最好只有更好。高效是程序員必須作到的事情,無錯是程序員一生的追求。復用、分而治之、折衷是代碼哲學的基本思想。模塊化與面向對象是實現高效無錯代碼的方法。高效無錯代碼需要思想與實踐的不斷反復。
1.2.1 命名約定
命令規范基本上採用了微軟推薦的匈牙利命名法,略有簡化。
1. 常量
常量由大寫字母和數字組成,中間可以下劃線分隔,如 CPU_8051。
2. 變數
變數由小寫(變數類型)字母開頭,中間以大寫字母分隔,可以添加變數域前綴(變數活動域前綴以下劃線分隔)。如: v_nAcVolMin(交流電壓最小值)。
變數域前綴見下表
局部變數,如果變數名的含義十分明顯,則不加前綴,避免煩瑣。如用於循環的int型變數 i,j,k ;float 型的三維坐標(x,y,z)等。
3. 函數名一般由大寫字母開頭,中間以大寫字母分隔,如SetSystemPara。函數命名採用動賓形式。如果函數為最底層,可以考慮用全部小寫,單詞間採用帶下劃線的形式。如底層圖形函數:pixel、lineto以及讀鍵盤函數get_key 等。
4. 符號名應該通用或者有具體含義,可讀性強。尤其是全局變數,靜態變數含義必須清晰。C++中的一些關鍵詞不能作為符號名使用,如class、new、friend等。符號名長度小於31個,與ANSI C 保持一致。命名只能用26個字母,10個數字,以及下劃線『_』來組成,不要使用『$』『@』等符號。下劃線『_』使用應該醒目,不能出現在符號的頭尾,只能出現在符號中間,且不要連續出現兩個。
5. 程序中少出現無意義的數字,常量盡量用宏替代。
1.2.2 使用斷言
程序一般分為Debug版本和Release版本,Debug版本用於內部調試,Release版本發行給用戶使用。
斷言assert是僅在Debug版本起作用的宏,它用於檢查「不應該」發生的情況。以下是一個內存復製程序,在運行過程中,如果assert的參數為假,那麼程序就會中止(一般地還會出現提示對話,說明在什麼地方引發了assert)。
//復制不重疊的內存塊
void memcpy(void *pvTo, void *pvFrom, size_t size)
{
void *pbTo = (byte *) pvTo;
void *pbFrom = (byte *) pvFrom;
assert( pvTo != NULL && pvFrom != NULL );
while(size - - > 0 )
*pbTo + + = *pbFrom + + ;
return (pvTo);
}
assert不是一個倉促拼湊起來的宏,為了不在程序的Debug版本和Release版本引起差別,assert不應該產生任何副作用。所以assert不是函數,而是宏。程序員可以把assert看成一個在任何系統狀態下都可以安全使用的無害測試手段。
以下是使用斷言的幾個原則:
1)使用斷言捕捉不應該發生的非法情況。不要混淆非法情況與錯誤情況之間的區別,後者是必然存在的並且是一定要作出處理的。
2)使用斷言對函數的參數進行確認。
3)在編寫函數時,要進行反復的考查,並且自問:「我打算做哪些假定?」一旦確定了的假定,就要使用斷言對假定進行檢查。
4)一般教科書都鼓勵程序員們進行防錯性的程序設計,但要記住這種編程風格會隱瞞錯誤。當進行防錯性編程時,如果「不可能發生」的事情的確發生了,則要使用斷言進行報警。
1.2.3 優化/效率
規則一:對於在中斷函數/線程和外部函數中均使用的全局變數應用volatile定義。例如:
volatile int ticks;
void timer(void) interrupt 1 //中斷處理函數
{
ticks++
}
void wait(int interval)
{
tick=0;
while(tick<interval);
}
如果未用volatile,由於while循環是一個空循環,編譯器優化後(編譯器並不知道此變數在中斷中使用)將會把循環優化為空操作!這就顯然不對了。
規則二:不要編寫一條過分復雜的語句,緊湊的C++/C代碼並不見到能得到高效率的機器代碼,卻會降低程序的可理解性,程序出錯誤的幾率也會提高。
規則三:變數類型編程中應用原則:盡量採用小的類型(如果能夠不用「Float」就盡量不要去用)以及無符號Unsigned類型,因為符號運算耗費時間較長;同時函數返回值也盡量採用Unsigned類型,由此帶來另外一個好處:避免不同類型數據比較運算帶來的隱性錯誤。

1.2.4 其他
規則一:不要編寫集多種功能於一身的函數,在函數的返回值中,不要將正常值和錯誤標志混在一起。
規則二:不要將BOOL值TRUE和FALSE對應於1和0進行編程。大多數編程語言將FALSE定義為0,任何非0值都是TRUE。Visual C++將TRUE定義為1,而Visual Basic則將TRUE定義為-1。例如:
BOOL flag;

if(flag) { // do something } // 正確的用法
if(flag==TRUE) { // do something } // 危險的用法
if(flag==1) { // do something } // 危險的用法
if(!flag) { // do something } // 正確的用法
if(flag==FALSE) { // do something } // 不合理的用法
if(flag==0) { // do something } // 不合理的用法
規則三:小心不要將「= =」寫成「=」,編譯器不會自動發現這種錯誤。
規則四:建議統一函數返回值為無符號整形,0代表無錯誤,其他代表錯誤類型。

1.3 模塊化的C編程

C語言雖然不具備C++的面向對象的成分,但仍應該吸收面向對象的思想,採用模塊化編程思路。面向對象的思想與面向對象的語言是兩個概念。非面向對象的語言依然可以完成面向對象的編程,想想C++的誕生吧!
C++沒有理由對C存在傲慢與偏見,不是任何場合C++方法都是解決問題的良葯,譬如面對嵌入式系統效率和空間的雙重需求。注意我們談的是方法,而不是指編譯器。
C在軟體開發上存在的首要問題是缺乏對數據存取的控制(封裝),C編程者樂而不疲的使用著大量extern形式的全局變數在各模塊間交換著數據,「多方便啊」編程者樂曰,並傳授給下一個編程者。這樣多個變數出現在多個模塊中,剪不斷理還亂,直到有一天終於發現找一個「人」好難。一個東西好吃,智者淺嘗之改進之,而愚者只會直至撐死。
這世上本沒有什麼救世主,應在C上多下功夫,程序員和C締造者早就有過思考,相信野百合也有春天,還是看看C語言如何實現模塊化編程方法,在部分程度上具備了OO特性封裝與多態。
在具體闡述之前,需要明確生存期與可見性的概念。生存期指的是變數在內存的生存周期,可見性指的是變數在當前位置是否可用。兩者有緊密聯系,但不能混為一談。一個人存在但不可見只能解釋成上帝或靈魂,一個變數存在但不可見卻並非咄咄怪事,模塊化方法正是利用了靜態函數、靜態變數這些「精靈」們特殊的生存期與可見性。
最後需要明確一點的是這里的模塊是以一個.C文件為單位。
規則一:利用函數命名規則和靜態函數
模塊中不被其他模塊調用的內部函數採用以下命名規則:用全部小寫,單詞間採用帶下劃線的形式。如底層圖形函數:pixel、lineto以及讀鍵盤函數get_key等。這些函數應定義為static靜態函數,這樣在其他模塊錯誤地調用這些函數時編譯器能給出錯誤(如BC編譯器)。(注意:有些編譯器不能報告錯誤,但為了代碼風格一致和函數層次清晰,仍建議這樣作)。
規則二:利用靜態變數
模塊中不能被其他模塊讀寫的全局變數應採用static聲明,這樣在其他模塊錯誤地讀寫這些變數時編譯器能給出警告(C51編譯器)或錯誤(BC編譯器)。
規則三:引入OO介面概念和指針傳參
模塊間的數據介面(也就是函數)應該事先較充分考慮,需要哪些介面,通過介面需要操作哪些數據,盡量作到介面的不變性。
模塊間地數據交換盡量通過介面完成,方法是通過函數傳參數,為了保證程序高效和減少堆棧空間,傳大量參數(如結構)應採用傳址的方式,通過指針作為函數參數或函數返回指針,盡量杜絕extern形式的全局變數,請注意是extern形式的全局變數,模塊內部的全局變數是允許和必須的。
傳指針參數增加的開銷主要是作參數的指針和局部指針的數據空間(嵌入式系統(如C51)往往由於堆棧空間有限,函數參數會放到外部RAM的堆棧中),增加的代碼開銷僅是函數的調用,帶來的是良好的模塊化結構,而且使用介面函數會比在代碼中多處直接使用全局變數大大節約代碼空間。
需注意一點的事物總有他的兩面性,水能載舟,也能覆舟。對於需要頻繁訪問的變數如果仍採用介面傳遞,函數調用的開銷是巨大的,這時應考慮仍採用extern全局變數。
以下演示了兩個C模塊交換數據:
//Mole1.C
OneStruct* void GetOneStruct(void); //獲取模塊1數據介面
void SetOneStruct(OneStruct* pOneStruct); //寫模塊1數據介面

struct OneStruct
{
int m¬_imember;
//……
}t1; //模塊1的數據

//t1初始化代碼…..

OneStruct* void GetOneStruct(void)
{
OneStruct* pt1; //只需定義一個局部變數
t1.imember=15;
pt1=&t1;
return pt1;
}

void SetOneStruct(OneStruct* pOneStruct)
{
t1.imember=pOneStruct->imember;
//…….
}

//Mole2.C
void OperateOneStruct(void); //模塊2通過模塊1提供的介面操作模塊1的數據
OneStruct* void GetOneStruct(void);
void SetOneStruct(OneStruct* pOneStruct);

void OperateOneStruct(void)
{
OneStruct* pt2; //只需定義一個局部變數
pt2=GetOneStruct(); //讀取數據
SetOneStruct(pt2); //改寫數據
}
採用介面訪問數據可以避免一些錯誤,因為函數返回值只能作右值,全局變數則不然。
例如 cOneChar == 4; 可能被誤為cOneChar = 4;
規則四:有限的封裝與多態
不要忘記C++的class源於C的struct,C++的虛函數機制實質是函數指針。為了使數據、方法能夠封裝在一起,提高代碼的重用度,如對於一些與硬體相關的數據結構,建議採用在數據結構中將訪問該數據結構的函數定義為結構內部的函數指針。這樣當硬體變化,需要重寫訪問該硬體的函數,只要將重寫的函數地址賦給該函數指針,高層代碼由於使用的是函數指針,所以完全不用動,實現代碼重用。而且該函數指針可以通過傳參數或全局變數的方式傳給高層代碼,比較方便。例如:
struct OneStruct
{
int m¬_imember;
int (*func)(int,int);
//……
}t2;

㈥ 曲靖電腦培訓學校告訴你學Java怎麼寫出高質量的代碼

學一門編程語言是進入IT行業的法寶,很多人在明確了自己的興趣,明確了自己未來想從事的領域,明確了自己未來想成為一個什麼樣的程序員後,選擇了學Java。不管學哪門編程語言,一定是要學會敲代碼的,這是你不可逃避的。學Java,怎麼寫出高質量的Java代碼?java課程http://www.kmbdqn.cn/認為這就是你得高度集中精力關心的問題。

怎麼寫出高質量的Java代碼?


1、堅持


沒有誰能夠隨隨便便就成功,也沒有誰能夠隨隨便便敲一手高質量的Java代碼,就算你現在看著別人敲代碼怎麼那麼輕松,他們的輕松來源於堅持多次的練習,你要是想讓自己的Java代碼變得高質量,那麼就離不開你長久的堅持,只有投入足夠多的時間,做出足夠的練習,你才能夠獲得質的飛躍。


2.專業


Java專業知識是基本,好比蓋樓,地基不穩,怎麼也蓋不出參天大樓。Java代碼的敲寫,很多的時候,也是一樣的,你連最基礎的Java理論知識都沒有掌握好,然後就想跑在其他人的前面,敲出高質量的Java代碼,那麼簡直就是做夢。起初,Java專業知識學起來是比較枯燥的,但是你必須要好好的去研究跟掌握。


3.模仿


你是怎麼開始進入Java代碼的敲寫的,很多朋友回想一下,你是不是從模仿開始的,仿照其他人已經寫好的代碼跟著寫一遍,寫兩遍,甚至是寫三遍。模仿很重要,同時思考也很重要,熟練來源於練習,做好和作對源於不斷的實踐,你要想敲出高質量的Java代碼,那麼你一定得好好研究怎麼樣模仿的效果最好。


㈦ 如何編寫高質量的代碼

1. 打好基礎
寫出高質量代碼,並不是搭建空中樓閣,需要有一定的基礎,這里我重點強調與代碼質量密切相關的幾點:
掌握好開發語言,比如做Android就必須對Java足夠熟悉,《Effective Java》一書就是教授大家如何更好得掌握Java, 寫出高質量Java代碼。
熟悉開發平台, 不同的開發平台,有不同的API, 有不同的工作原理,同樣是Java代碼,在PC上寫與Android上寫很多地方不一樣,要去熟悉Android編程的一些特性,iOS編程的一些特性,了解清楚這些,才能寫出更加地道的代碼,充分發揮各自平台的優勢。
基礎的數據結構與演算法,掌握好這些在解決一些特定問題時,可以以更加優雅有效的方式處理。
基礎的設計原則,無需完全掌握23種經典設計模式,只需要了解一些常用的設計原則即可,甚至你也可以只了解什麼是低耦合,並在你的代碼中堅持實踐,也能寫出很不錯的代碼。
2. 代碼標准
代碼標准在團隊合作中尤為重要,誰也不希望一個項目中代碼風格各異,看得讓人糟心,即便是個人開發者,現在也需要跟各種開源項目打交道。標准怎麼定是一個老生常談的話題,我個人職業生涯中經歷過很多次的代碼標准討論會議,C++, C#, Java等等,大家有時會堅持自己的習慣不肯退讓。可現如今時代不一樣了,Google等大廠已經為我們制定好了各種標准,不用爭了,就用這些業界標准吧。
3. 想好再寫
除非你很清楚你要怎麼做,否則我不建議邊做邊想。
你真的搞清楚你要解決的問題是什麼了嗎?你的方案是否能有效?有沒有更優雅簡單的方案?准備怎麼設計它,必要的情況下,需要有設計文檔,復雜一些的設計需要有同行評審,寫代碼其實是很簡單的事情,前提是你得先想清楚。
4. 代碼重構
重構對於代碼質量的重要性不言而喻,反正我是很難一次把代碼寫得讓自己滿意、無可挑剔,《重構》這本書作為業內經典也理應人人必讀,也有其他類似的教授重構技巧的書,有些也非常不錯,遺憾的是我發現很多工作多年的同學甚至都沒有了解過重構的概念。
5. 技術債務
知乎上最近有個熱門問題《為什麼有些大公司技術弱爆了?》,其實裡面提到的很多歸根結底都是技術債務問題,這在一些大公司尤為常見。技術債務話題太大,但就代碼質量而言,我只想提一下不要因為這些債是前人留下的你就不去管,現實是沒有多少機會讓你從一個清爽清新的項目開始做起,你不得不去面對這些,你也沒法完全不跟這些所謂的爛代碼打交道。
因此我建議各位:當你負責一個小模塊時,除了把它做好之外,也要順便將與之糾纏在一起的技術債務還掉,因為這些債務最終將是整個團隊來共同承擔,任何一個人都別想獨善其身,如果你還對高質量代碼有追求的話。
作為團隊的技術負責人,也要頂住壓力,鼓勵大家勇於做出嘗試,引導大家不斷改進代碼質量,不要總是畏手畏腳,停滯不前,真要背鍋也得上,要有擔當。
6. 代碼審查
我曾經聽過一些較高級別的技術分享,竟然還不時聽到一些呼籲大家要做代碼審查的主題,我以為在這個級別的技術會議上,不應再討論代碼審查有什麼好,為什麼要做代碼審查之類的問題。同時我接觸過相當多所謂國內一線互聯網公司,竟有許多是不做代碼審查的,這一度讓我頗為意外。
這里也不想多談如何做好代碼審查,只是就代碼質量這點,不客氣地說:沒有過代碼審查經歷的同學,往往很難寫出高質量的代碼,尤其是在各種追求速度的糙快猛創業公司。
7. 靜態檢查
很多代碼上的問題,都可以通過一些工具來找到,某些場景下,它比人要靠譜得多,至少不會出現某些細節上的遺漏,同時也能有效幫助大家減少代碼審查的工作量。
Android開發中有Lint, Find bugs, PMD等優秀靜態檢查工具可用,通過改進這些工具找出的問題,就能對語法的細節,規范,編程的技巧有更多直觀了解。
建議最好與持續集成(CI),代碼審查環境配套使用, 每次提交的代碼都能自動驗證是否通過了工具的代碼檢查,通過才允許提交。
8. 單元測試
Android單元測試,一直備受爭議,主要還是原生的測試框架不夠方便,每跑一次用例需要在模擬器或者真機上運行,效率太低,也不方便在CI環境下自動構建單元測試,好在有Robolectric,能幫我們解決部分問題。
單元測試的一個非常顯著的優點是,當你需要修改大量代碼時,盡管放心修改,只需要保證單元測試用例通過即可,無需瞻前顧後。
9. 充分自測
有一種說法:程序員最害怕的是他自己寫的代碼,尤其是准備在眾人面前show自己的工作成果時,因此在寫完代碼後,需要至少跑一遍基本的場景,一些簡單的異常流。在把你的工作成果提交給測試或用戶前,充分自測是基本的職業素養,不要總想著讓測試幫你找問題,隨便用幾下就Crash的東西,你好意思拿給別人嗎?
10. 善用開源
並非開源的東西,質量就高,但至少關注度較高,使用人數較多,口碑較好的開源項目,質量是有一定保證的,這其中的道理很簡單。即便存在一些問題,也可以通過提交反饋,不斷改進。最重要的是,你自己花時間造的輪子,需要很多精力維護,而充分利用開源項目,能幫助你節省很多時間,把精力專注在最需要你關心的問題上。

㈧ 程序員如何寫出干凈的代碼

1編寫可讀的代碼
最簡單的方法是使用空格,在發布代碼之前,可以縮減代碼,但是沒有必要讓代碼看起來很小型化。

相反,可以使用縮進、換行和空行等方式,使代碼結構更具可讀性。代碼可讀性和可理解性就會提高,當然更容易理解。

2為變數、函數和方法使用有意義的名稱

「有意義的名稱」是指描述性足夠的名字,而不僅僅是編寫自己才能理解的,換句話說,名稱本身應該根據變數、函數或方法的內容和使用方式來定義。

需要注意的是,使用描述性名稱並不是說就可以隨意使用任意多個字元。比較好的辦法是將名字限制在3或4個單詞。

如果需要使用超過4個單詞,說明這個函數或方法需要同時執行多個的任務,所以應該簡化代碼,只使用必要的字元。

3讓一個函數或方法只執行一個任務

讓每個函數或方法只執行一個任務,如此一來,別人能夠很輕松的理解這些代碼。

如果你很難找到函數和方法的描述性名稱,或者需要編寫冗長的指令以便其他人可以使用,那請考慮這個建議,讓每個函數或方法只執行一個任務。

這種讓每一個函數或方法只執行一項任務的做法被稱為保持純函數。這種編碼實踐來自於函數式編程的概念。

4更容易遵循編碼模式

我們應該只在必要的時候使用注釋,而不是解釋糟糕的代碼。編寫無窮無盡的注釋將無助於將糟糕的代碼轉換成干凈的代碼。

如果代碼不好,應該通過改進代碼來解決這個問題,而不是添加一些如何使用它的說明。編寫干凈的代碼更重要。

5保持代碼風格一致性

最好的方法是選擇一套編碼方式,然後在所有的項目中堅持使用。

如此一來,即使中間做了其他項目,再回到之前項目的時候也會更容易上手。

當然,嘗試新的編碼方式是一件好事,它可以幫助我們找到更好的方法來開展工作。但是最好是在不同的實驗項目或練習上嘗試不同的編碼風格,而不是在主要項目上進行。

6經常自我檢查代碼

我們應該定期檢查代碼,並試著改進它。如果想讓代碼保持最佳狀態,就需要定期更新它們。

如果不審查和更新我們的舊代碼,它很快就會過時,就像我們的設備一樣。

閱讀全文

與程序員怎麼寫一手好的代碼相關的資料

熱點內容
北京電信伺服器託管雲空間伺服器 瀏覽:369
一般學編程有必要嗎 瀏覽:753
機器人編程方法 瀏覽:992
表盤編程gt 瀏覽:9
java源代碼閱讀 瀏覽:736
程序員用什麼鍵盤羅技 瀏覽:169
為什麼安卓手機每天都要更新app 瀏覽:707
java怎麼成為程序員 瀏覽:290
西門子s7200編程電纜怎麼連接 瀏覽:532
下載網頁中的pdf文件 瀏覽:90
音樂緩存文件夾的軟體 瀏覽:396
Dkms編譯列印機驅動 瀏覽:996
解壓縮文件操作異常 瀏覽:556
等待代碼編譯時你會幹嘛 瀏覽:493
單片機c語言中變數右移8位 瀏覽:82
解壓的一個小短片 瀏覽:831
二級壓縮空壓機哪家好排行 瀏覽:743
基於單片機超聲波測距 瀏覽:130
模擬隨機紅包演算法 瀏覽:387
程序員接外包網站 瀏覽:138