偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

90%的程序員都犯過的代碼錯(cuò)誤

新聞 前端
最近參加了多次的代碼review會,在review的過程中,發(fā)現(xiàn)有些問題幾乎每次都出現(xiàn)。挑了幾個(gè)比較典型的問題講解下。

 

最近參加了多次的代碼review會,在review的過程中,發(fā)現(xiàn)有些問題幾乎每次都出現(xiàn)。挑了幾個(gè)比較典型的問題講解下。這幾個(gè)問題都是初級問題,解決方法都很容易。只要掌握了方法,有意識避免,能讓短時(shí)間內(nèi)迅速提高代碼質(zhì)量。真所謂投入小,見效快。

變量命名不清晰,一詞多義

為變量命名時(shí)最重要的考慮事項(xiàng)是,該名字要 完全、準(zhǔn)確地描述出該變量所代表的事務(wù) 。容易閱讀,不會與其他事務(wù)混淆。

例如:

  1. if(staff_id == 0) 
  2.     printf("系統(tǒng)歸檔,不是員工歸檔"); 

上面這段代碼,staff_id是員工號的意思,用staff_id為0表示是系統(tǒng)歸檔。一詞多義,本來應(yīng)該把系統(tǒng)和人分開,但是混用到了一個(gè)變量。如果調(diào)用方出現(xiàn)個(gè)bug忘記把初始化的變量賦值,還會走到意外的邏輯。

解決方法是變量名稱首先要符合變量的實(shí)際意義,沒有歧義;對于一個(gè)變量名,不用特定值表示特殊邏輯。

有些代碼會把變量取不到的值賦予其他的意義,感覺是省事了,實(shí)際后患無窮。例如用戶名不可能為空,就用空值表示這個(gè)用戶數(shù)據(jù)已經(jīng)被刪除了。而且判定數(shù)據(jù)是否刪除的代碼看著也讓人莫名其妙。

總之,變量命名要保證沒有「潛規(guī)則」,防止給自己挖坑。

使用魔數(shù)

命名不清晰更嚴(yán)重的是,沒有命名,直接用魔數(shù)。如果連注釋都沒有,就只能靠猜。

使用魔數(shù)有兩個(gè)不好的地方:

1、不方便修改。

使用常量替換魔數(shù)是一種將程序「參數(shù)化」的方法,需要修改改動(dòng)一處就可以了,而不必代碼中到處修改。

例如在代碼中默認(rèn)綁定的端口是80,如果不用一個(gè)常量代替,哪天軟件升級默認(rèn)端口變成443了。要整個(gè)代碼搜索80這個(gè)數(shù)字,既耗時(shí),又容易改錯(cuò)。

2、代碼不方便閱讀。

只有一個(gè)數(shù)字,很難了解到具體的意思。

  1. for(int i = 0; i < 13; ++i) 
  2.     ... 

上面這段代碼,只看13,誰能猜出來是什么意思呢,為什么用13這個(gè)數(shù)值?可能只有寫代碼的人和上帝知道,如果天長日久,寫代碼的人忘記了,就只有上帝知道了。

也有同學(xué)會問,有的數(shù)字只用到一個(gè)地方,也起個(gè)常量的名字會不會太麻煩了?

答案是:不麻煩。給魔數(shù)起個(gè)好名字是應(yīng)該的,這是對的事,不要因?yàn)槁闊┚筒蛔?。有時(shí)為了起個(gè)準(zhǔn)確的名字,甚至要查下詞典。

有一個(gè)常用的判定方式:

一、如果引用魔數(shù)的地方不超過3個(gè),直接用數(shù)字影響也不大。如果超過了3個(gè),都是表示同一個(gè)數(shù)值意義,還是乖乖地用有意義的變量名代替。

二、如果魔數(shù)本身就是表示一個(gè)純粹的數(shù)字定義,例如是幾米、幾千克這種,作為參數(shù)傳遞。在函數(shù)的定義明確表示了形參數(shù)所代表的意義。大家看用到的地方和函數(shù)定義,就知道數(shù)字是表示多少個(gè)單位的意思,可以用魔數(shù)。但是如果用數(shù)字表示種類,例如

  1. const int ieBrowser=1; 
  2. const int chromeBrowser=2; 

表示瀏覽器的種類,如果直接只是看到1或2,是不明白什么意思的。即使在函數(shù)聲明的地方已經(jīng)說過是瀏覽器種類了,也不要用魔數(shù)。

魔數(shù)解決的辦法很簡單: 用枚舉、常量等方式,代替魔數(shù) 。

if else 或switch等邏輯判斷語句太長

例如下面的偽代碼代碼,條件分支很多,用很長的if else語句或者switch語句才能表達(dá)完整的邏輯,要思考下是否能用「表驅(qū)動(dòng)」方式來優(yōu)化。

  1. const int CN=1; 
  2. const int US=2; 
  3. const int UK=3; 
  4.  
  5. string language; 
  6. if(country==CN) 
  7.     language="中文"
  8. else if(country==US) 
  9.     language="english"
  10. else if(country==UK) 
  11.     language="english"
  12. else 
  13.     language=""

條件分支太多太長有幾點(diǎn)不好:

1、代碼太長,不易閱讀。

如果超過了一個(gè)屏幕能表示的長度,要翻頁才能看完代碼,會大大降低看代碼的效率。因?yàn)榇a的信息密度太低了。

2、不易擴(kuò)展,修改代碼。

就像上面的例子,如果又增加了新的條件判斷,那么要增加新的if else語句,由于修改了邏輯,要重新測試,也要防止改錯(cuò)。

可以用「表驅(qū)動(dòng)」的方式替代太長的邏輯分支。

把每個(gè)條件要用到的數(shù)據(jù)放到一個(gè)「表」里。用條件分支的判斷條件來索引到表中的數(shù)據(jù)。

上面的代碼可以修改為

  1. const int CN=1; 
  2. const int US=2; 
  3. const int UK=3; 
  4.  
  5. string languageTable[]={"","中文","English","English"}; 
  6. //先判斷country變量是否在定義的CN、US、UK范圍內(nèi),如果在繼續(xù) 
  7. language = languageTable[country]; 

經(jīng)過修改,代碼變得很短,一眼就能看出代碼所表示的邏輯。而且以后更新的只有數(shù)據(jù),邏輯部分不用修改。

使用「表驅(qū)動(dòng)」后,邏輯和數(shù)據(jù)分離。使得新增數(shù)據(jù)修改簡單,而且一目了然。

總結(jié)

上面只是簡單的說明了幾種常見的代碼書寫錯(cuò)誤。稍加注意,就能夠在短時(shí)間內(nèi)迅速提升代碼質(zhì)量。具體的方法可以參考一些代碼規(guī)范,或者重構(gòu)的書籍,例如「表驅(qū)動(dòng)」會有更詳盡的介紹。

最本質(zhì)的還是要從意識上有足夠的認(rèn)識。 代碼是寫給人看的 ,寫代碼時(shí)要有同理心,想到以后讓閱讀代碼的人盡量能夠不費(fèi)力讀懂。換位思考,如果你就是review人,或后面接手這個(gè)代碼的人,你會喜歡這段代碼嗎?

畢竟代碼閱讀的次數(shù)遠(yuǎn)遠(yuǎn)超過編寫的次數(shù)。確保代碼閱讀方便,而不僅是編寫方便。

 

責(zé)任編輯:張燕妮 來源: 架構(gòu)學(xué)而思
相關(guān)推薦

2015-03-02 15:30:11

2015-04-17 09:47:57

2011-06-29 09:27:10

2019-08-22 10:07:33

程序員開發(fā)危機(jī)

2018-10-15 09:50:07

程序員高薪淘汰

2021-11-02 09:54:51

Java開發(fā)工具

2020-04-20 18:15:46

開發(fā)自信技術(shù)

2016-12-06 10:12:07

程序員開會

2021-09-28 09:57:50

程序員技能開發(fā)

2020-05-17 16:10:36

開發(fā)人員軟件開發(fā)開發(fā)

2022-10-17 07:40:21

AI項(xiàng)目數(shù)據(jù)

2017-03-13 09:07:05

測定代碼基因

2017-11-14 11:28:49

程序員索引數(shù)據(jù)

2022-07-20 16:57:18

程序員高薪職業(yè)

2013-08-20 09:33:59

程序員

2019-07-03 14:47:43

程序員祼辭就業(yè)

2019-07-05 11:05:10

Java程序員中間件

2018-07-20 11:22:03

程序員基礎(chǔ)知識

2015-06-17 14:24:48

優(yōu)秀程序員整潔代碼

2014-09-24 09:37:05

程序員
點(diǎn)贊
收藏

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