如何成為更優(yōu)秀的程序員 永遠(yuǎn)不要復(fù)制代碼
來源:易賢網(wǎng) 閱讀:1170 次 日期:2014-09-05 09:42:56
溫馨提示:易賢網(wǎng)小編為您整理了“如何成為更優(yōu)秀的程序員 永遠(yuǎn)不要復(fù)制代碼”,方便廣大網(wǎng)友查閱!

這篇文章要介紹的,是我作為專業(yè)程序員這些年來學(xué)到的能真正提高我的代碼質(zhì)量和整體工作效率的10件事情。

1. 永遠(yuǎn)不要復(fù)制代碼

不惜任何代價(jià)避免重復(fù)的代碼。如果一個(gè)常用的代碼片段出現(xiàn)在了程序中的幾個(gè)不同地方,重構(gòu)它,把它放到一個(gè)自己的函數(shù)里。重復(fù)的代碼會導(dǎo)致你的同事 在讀你的代碼時(shí)產(chǎn)生困惑。而重復(fù)的代碼如果在一個(gè)地方修改,在另外一個(gè)地方忘記修改,就會產(chǎn)生到處是bug,它還會使你的代碼體積變得臃腫。現(xiàn)代的編程語 言提供了很好的方法來解決這些問題,例如,下面這個(gè)問題在以前很難解決,而如今使用lambdas卻很好實(shí)現(xiàn):

///<summary>

/// 一些函數(shù)含有部分重復(fù)代碼

///</summary>

void OriginalA()

{

DoThingsA();

// unique code

DoThingsB();

}

///<summary>

/// 另外一個(gè)含有部分重復(fù)代碼的函數(shù)

///</summary>

void OriginalB()

{

DoThingsA();

// 沒有重復(fù)的代碼

DoThingsB();

}

現(xiàn)在我們重構(gòu)含有部分相同代碼的函數(shù),用delegate模式重寫它們:

///<summary>

/// Encapsulate shared functionality

///</summary>

///User defined action

void UniqueWrapper(Action action)

{

DoThingsA();

action();

DoThingsB();

}

///<summary>

/// New implmentation of A

///</summary>

void NewA()

{

UniqueWrapper(() =>

{

// unique code

});

}

///<summary>

/// New implementation of B

///</summary>

void NewB()

{

UniqueWrapper(() =>

{

// unique code

});

}

2. 留意你開始分心的時(shí)候

當(dāng)你發(fā)現(xiàn)自己在瀏覽facebook或微博、而不是在解決問題,這通常是一種你需要短暫休息的信號。離開辦公桌,去喝一杯咖啡,或去跟同事聊5分鐘。盡管這樣做看起來有點(diǎn)反直覺,但長久去看,它會提高你的工作效率。

3. 不要匆忙趕任務(wù)而放棄原則

當(dāng)帶著壓力去解決一個(gè)問題或修改一個(gè)bug,你很容易失去自制,發(fā)現(xiàn)自己匆匆忙忙,甚至完全忘了一直堅(jiān)持的重要的測試過程。這通常會導(dǎo)致更多的問題,會讓你在老板或同事眼里顯得很不專業(yè)。

4. 測試你完成的代碼

你知道你的代碼能做什么,而且試了一下,它確實(shí)好用,但你實(shí)際上需要充分的驗(yàn)證它。分析所有可能的邊界情況,測試在所有可能的條件下它都能如期的工 作。如果有參數(shù),傳遞一些預(yù)期范圍外的值。傳遞一個(gè)null值。如果可能,讓同事看看你的代碼,問他們能否弄壞它。單元測試是到達(dá)這種目的的常規(guī)方法。

5. 代碼審查

提交你的代碼之前,找個(gè)同事一起坐下來,向他解釋你做了哪些修改。通常,這樣做的過程中你就能發(fā)現(xiàn)代碼中的錯(cuò)誤,而不需要同事說一句話。這比自己審查自己的代碼要有效的多得多。

6. 讓代碼更少

如果你發(fā)現(xiàn)寫了大量的代碼來解決一個(gè)簡單的問題,你很可能做錯(cuò)了。下面的boolean用法是一個(gè)很好的例子:

if (numMines > 0)

{

enabled=true;

}

else

{

enabled=false;

}

這時(shí)你應(yīng)該寫成這樣:

enabled = numMines > 0;

代碼越少越好。這會使bug更少,重構(gòu)可能性更小,出錯(cuò)的幾率更小。要適度??勺x性同等重要,你可不能這樣做而使代碼喪失可讀性。

7. 為優(yōu)雅的代碼而努力

優(yōu)雅的代碼非常的易讀,只用手邊很少的代碼、讓機(jī)器做很少的運(yùn)算就能解決問題。在各種環(huán)境中都做到代碼優(yōu)雅是很難的,但經(jīng)過一段時(shí)間的編程,你會對 優(yōu)雅的代碼是個(gè)什么樣子有個(gè)初步的感覺。優(yōu)雅的代碼不會通過重構(gòu)來獲得。當(dāng)你看到優(yōu)雅的代碼是會很高興。你會為它自豪。例如,下面就是一個(gè)我認(rèn)為是優(yōu)雅的 方式來計(jì)算多邊形面積的方法:

static public double GetConvexPolygonArea(Vector2[] vertices)

{

double area = 0;

for (int i = 0; i < vertices.Length; i++)

{

Vector2 P0 = vertices[i];

Vector2 P1 = vertices[(i + 1) % vertices.Length];

area += P0.Wedge(P1);

}

return area / 2;

}

8. 編寫不言自明的代碼

勿庸置疑,注釋是編程中很重要的一部分,但能夠不言自明的代碼跟勝一籌,因?yàn)樗茏屇阍诳创a時(shí)就能理解它。函數(shù)名變量名要慎重選擇,好的變量/方法名字放到語言語義環(huán)境中時(shí),不懂編程的人都能看懂。例如:

void DamagePlayer(Player player, int damageAmount)

{

if (!player.m_IsInvincible && !player.m_IsDead)

{

player.InflictDamage( damageAmount );

}

}

能自我說明的代碼不能代替注釋。注釋是用來解釋“為什么”的,而自我說明的代碼是來描述“是什么”的。

9. 不要使用純數(shù)字

直接把數(shù)字嵌入代碼中是一種惡習(xí),因?yàn)闊o法說明它們是代表什么的。當(dāng)有重復(fù)時(shí)更糟糕——相同的數(shù)字在代碼的多個(gè)地方出現(xiàn)。如果只修改了一個(gè),而忘記了其它的。這就導(dǎo)致bug。一定要用一個(gè)命名常量來代表你要表達(dá)的數(shù)字,即使它在代碼里只出現(xiàn)一次。

10. 不要做手工勞動(dòng)

當(dāng)做一系列動(dòng)作時(shí),人類總是喜歡犯錯(cuò)誤。如果你在做部署工作,并且不是一步能完成的,那你就是在做錯(cuò)事。盡量的讓工作能自動(dòng)化的完成,減少人為錯(cuò)誤。當(dāng)做工作量很大的任務(wù)時(shí),這尤其重要。

11. 避免過早優(yōu)化

當(dāng)你要去優(yōu)化一個(gè)已經(jīng)好用的功能代碼時(shí),你很有可能會改壞它。優(yōu)化只能發(fā)生在有性能分析報(bào)告指示需要優(yōu)化的時(shí)候,通常是在一個(gè)項(xiàng)目開發(fā)的最后階段。性能分析之前的優(yōu)化活動(dòng)純屬浪費(fèi)時(shí)間,并且會導(dǎo)致bug出現(xiàn)。

好吧,我說是10個(gè),但你卻得到了額外贈(zèng)送的一個(gè)!

更多信息請查看IT技術(shù)專欄

更多信息請查看網(wǎng)絡(luò)編程
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)