自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

程序員都應(yīng)該學(xué)寫“規(guī)范”的代碼

開發(fā) 后端 前端
程序員需要學(xué)習(xí)的最重要的東西是“自我規(guī)范”。這些規(guī)范就是:盡可能地寫出最簡潔的代碼;如果代碼后期會因為改動而變得凌亂不堪就得重構(gòu);盡量刪除沒用的代碼,并添加注釋。

在過去的7年半時間里,我?guī)н^的軟件實習(xí)生超過一打,也看到過數(shù)以百計的學(xué)生和畢業(yè)生的檔案。我發(fā)現(xiàn)很多事情他們都需要學(xué)習(xí)。或許你會說,我說的不 就是某種特定的技術(shù)、算法、數(shù)學(xué),或者其他特定形式的知識嗎?沒錯,這的確是需要學(xué)習(xí)的,但卻并不是最重要的事情。他們需要學(xué)習(xí)的最重要的東西是“自我規(guī) 范”。這些規(guī)范就是:盡可能地寫出最簡潔的代碼;如果代碼后期會因為改動而變得凌亂不堪就得重構(gòu);盡量刪除沒用的代碼,并添加注釋。

我花了很多時間來敦促這些實習(xí)生去學(xué)習(xí)這些內(nèi)容。我經(jīng)常會問他們,怎么樣才能成為一名優(yōu)秀的程序員,他們也通常會回答說,代碼應(yīng)該清晰易懂易于維護(hù)。這的確是我想聽到的聲音,但是很少有年輕的程序員真的能夠始終如一地貫徹這一點。

請謹(jǐn)記這一點,要懂得“自我規(guī)范”,也不能一旦代碼“起效了”就立馬置之腦后。如果所有的變量都命名錯誤,但是代碼依然可以***地運行,那么這些代 碼絕對亂糟糟得讓人不忍直視。將功能代碼改進(jìn)為簡潔代碼可能在短期內(nèi)是看不到回報的:代碼原本就可以工作,在清潔之后依然可以工作。這就是為什么你需要 “自我規(guī)范”這一步驟了。這也是為什么實習(xí)工作是如此必要:一個好的上司是相當(dāng)注重代碼質(zhì)量的(即使所謂“好代碼”的定義對于每個程序員都不一樣),從而 迫使實習(xí)生和初級程序員不得不反復(fù)修改。

[[138632]]

下面我舉的一些例子都是新手程序員寫代碼的時候經(jīng)常出現(xiàn)的:

名不副實的函數(shù)/變量/類

這些函數(shù)、類和變量實際所做的事與其名字所表達(dá)的含義并不一致。片面看名字是正確的,但是聯(lián)系實際的話,有的甚至是毫不相關(guān)的。

舉個例子,我上一期的實習(xí)生寫了兩個類:EditorGUI和EditorObjectCreatorGUI。用于處理編輯界面的代碼。讓我哭笑不 得的是,用于創(chuàng)建新對象的是EditorGUI,而EditorObjectCreatorGUI只能通過處理不同的對象進(jìn)行導(dǎo)航。兩者的含義居然是截然 相反的!即使代碼還算相對簡單,但我還是花了相當(dāng)長的一段時間用來理解它,因為一開始我是在一種完全相反的假設(shè)基礎(chǔ)上來理解的。這種情況的解決方案非常簡 單:重命名EditorObjectCreatorGUI為EditorObjectNavigationGUI即可,這樣就易于理解多了。

這種情況我看到過很多。之所以會發(fā)生這種情況是因為代碼在工作過程中發(fā)生了演變。在選擇名字的時候可能還是正確的,但到了寫完代碼的那一刻,就名不副實了。關(guān)鍵是要時刻銘記命名法則。你得明白你添加的東西是否依然符合函數(shù)和類的名稱。

混亂的類

另一個問題是類很亂:類做了很多不相關(guān)的事情。新功能的添加很簡單,但是慢慢的,你會發(fā)現(xiàn)你的代碼變得臃腫不堪,各種不相關(guān)的功能隨處可見。有時候,臃腫與否也并不指的是類的大?。耗硞€類可能只有幾百行,但依然囊括了不屬于它的代碼。

為什么會發(fā)生這種情況呢?舉個例子:假設(shè)由于某種原因,某個GUI類需要分析什么樣的紋理可行(可能是有按鈕要用來選擇紋理)。如果這個GUI類是 唯一需要這個分析結(jié)果的類,那么在GUI類中這樣做是有意義的。然而,由于某種原因,一個完全無關(guān)的gameplay類也需要這些信息。所以你需要將這些 紋理查詢的信息從GUI類傳給gameplay類。這時候,其實這個GUI類已經(jīng)變大了:因為它里面其實還包括了TextureAnalyser類。解決 方法也簡單:將TextureAnalyser類分割為一個單獨的類,GUI類和gameplay類都可以使用它。

關(guān)于這一條經(jīng)驗法則很多人提出質(zhì)疑:要是我添加的功能仍然適合原來這個類的名字呢?如果的確不適合,那么我就必須重命名,或者將其分割成單獨的類,抑或用代碼寫成一個不同的類嗎?

如果你不能為你的類想出一個合適的名字,給人的感覺就會不舒服。如果你不能在類的名字中描述它的目的,那么就會顯得亂七八糟。有時候我們還需要將某個臃腫的類分割成幾部分,并各自取一個恰當(dāng)?shù)拿帧?/p>

過于龐大的類

這和上一點——混亂的類有些類似:很多東西一點一點地都添加到類中,然后它不可避免地就臃腫了。在這種情況下,這樣一個類仍然是有意義的,但就是長 得太大個了點。這么個龐然大物不但繁瑣,而且很容易出現(xiàn)bug,因為大量的代碼需要用于操作同一個私有成員變量,所以我們很容易忽視一些細(xì)節(jié)。

分割一個已經(jīng)長得很大的類其實是相當(dāng)枯燥的。這也會成為一個挑戰(zhàn),如果類中的代碼高度交織在一起的話。再加上它已經(jīng)在工作,修復(fù)時不能添加新功能,這樣一來,我不得說,分割一個過于龐大的類,不能嚴(yán)格地自我規(guī)范是不行的。

根據(jù)在Ronimo的普遍經(jīng)驗,類保持在500行代碼以下、函數(shù)保持在50行代碼以下是最合適的。不過有時候,這樣做反倒不可行,也不明智。但是一般說來,一旦類或函數(shù)超出了那個界限我們就可以想辦法重構(gòu),并將之分割為更小更易于管理的片段了。

關(guān)于代碼注釋

幾乎所有的示例代碼都會包含注釋好了的代碼片段,而不說明為什么。這段代碼需要修復(fù)嗎?舊的代碼是否已經(jīng)被取代了?為什么那兒要寫這些代碼?大家都知道沒有注釋的代碼常常不知所言,但不知何故,很多人都會忘記在自己的代碼上注釋。

并行邏輯和代碼重復(fù)

還有一個問題就是我經(jīng)常能在若干個代碼段處看到相似的邏輯。

例如,我們可以從紋理這個名稱知道它大概的目標(biāo)對象,比如說是“TreeBackground.dds”。為了知道紋理是否可以用于tree,我們 檢查了文件名以便知道它是不是以“tree”開的頭??赡苁褂肧DK的話我們用filename.beginsWith(“tree”)可以很快地檢測出 來。只是這句代碼這么短,我們往往會選擇哪個地方需要,就直接復(fù)制粘貼。當(dāng)然這樣就是代碼重復(fù)了,而正如每個人都知道的,我們應(yīng)該避免重復(fù)代碼,但如果復(fù) 制的代碼是如此之短,我們往往會忘記這一點,很自然地就直接copy了。此處我們面對的問題也是顯而易見的:也許后面我們檢查某個紋理是否適合tree的 方法就得變了,然后我們就不得不實行“霰彈式修改”(即到處修改)策略,一處一處地修復(fù)。

此處的一般規(guī)律是,如果是非常具體的代碼,那就不要復(fù)制,即使原本的代碼超級之短,調(diào)用函數(shù)甚至比直接寫需要更多的代碼,也應(yīng)該封裝成函數(shù)。

上面討論的這些內(nèi)容已經(jīng)講得非常透徹了。很多內(nèi)容甚至你在大學(xué)中就學(xué)過。但是現(xiàn)在要面臨的挑戰(zhàn)是你需要一步步地從被動遵守到主動銘記于心養(yǎng)成一種習(xí)慣。這也是為什么Ronimo中的實習(xí)生最重要的不是學(xué)習(xí)知識,而是學(xué)會自我規(guī)范。

 

 

責(zé)任編輯:王雪燕 來源: 極客網(wǎng)
相關(guān)推薦

2021-10-20 06:05:01

編程語言開發(fā)

2012-02-28 10:52:13

2018-03-07 12:57:53

2024-04-10 12:36:41

硬件代碼

2021-02-20 10:37:43

代碼編碼開發(fā)

2021-08-19 15:14:29

程序員電子表格Airtable

2016-06-03 15:18:45

程序員

2014-07-16 09:34:44

2011-07-25 10:09:57

Python

2012-10-11 10:32:48

Linux命令程序員

2023-01-31 15:43:47

2015-04-16 10:26:51

程序員 Python Ruby

2014-12-26 10:19:14

程序員

2013-03-20 17:58:41

虛擬內(nèi)存程序員

2021-10-18 10:21:28

程序員技能優(yōu)化

2022-09-11 15:20:05

程序員命令開發(fā)

2017-09-07 15:12:42

程序員

2011-06-16 08:58:57

軟考程序員

2023-12-27 09:00:00

Python魔術(shù)方法開發(fā)

2014-08-04 10:43:47

程序員
點贊
收藏

51CTO技術(shù)棧公眾號