日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
提升代碼可讀性的10個技巧

具有較強(qiáng)可讀性的代碼,能幫助你調(diào)試程序,不讓自己活得太累。

陽明ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

代碼可讀性是計算機(jī)編程領(lǐng)域中普遍存在的問題。這也是我們成為開發(fā)者首先要學(xué)習(xí)的事情之一。本文會詳細(xì)介紹在編寫強(qiáng)可讀性代碼時***實踐中最重要的一部分內(nèi)容。

1 – 注釋和文檔

IDE(Integrated Development Environmnet,集成開發(fā)環(huán)境)在過去數(shù)年中已經(jīng)存在了很長時間。使用 IDE 注釋代碼比以往容易得多。某些確切的注釋標(biāo)準(zhǔn)可以讓 IDE 和其它工具以不同的方式來完成注釋。

看個示例:

我在這里添加到函數(shù)定義前的注釋可以在使用函數(shù)的時候顯示出來,甚至在其它文件中使用這個函數(shù)也沒問題。

下面是另一個示例,關(guān)于調(diào)用一個第三方庫的函數(shù):

在這些示例中,注釋(或文檔)的類型是基于 PHPDoc 的,使用的 IDE 是 Aptana。

2 – 保持一致的縮進(jìn)

假設(shè)你已經(jīng)知道代碼需要縮進(jìn)。不過值得注意的是,***保持縮進(jìn)樣式一致。

縮進(jìn)代碼的方式很多,這里最最常見的兩種:

風(fēng)格 1:

 
 
 
 
  1. function foo() { 
  2.     if($maybe){ 
  3.         do_it_now(); 
  4.         again(); 
  5.     } else{ 
  6.         abort_mission(); 
  7.     } 
  8.     finalize(); 
  9. }  

風(fēng)格 2:

 
 
 
 
  1. function foo(){   
  2. if($maybe) {   
  3.  do_it_now(); 
  4.         again(); 
  5.     }else{   
  6.  abort_mission(); 
  7.     } 
  8.     finalize(); 
  9. }  

我以前使用的風(fēng)格 #2,但最近改為 #1 了。但這個問題只是一個偏好的問題。沒有“***”的風(fēng)格來讓每一個人都去遵循。實際上,***的風(fēng)格就是一致的風(fēng)格。如果你是團(tuán)隊的一員,或者你在向某個項目貢獻(xiàn)代碼,你就應(yīng)該遵循項目中正在使用的風(fēng)格。

縮進(jìn)風(fēng)格間并不總是會有明顯的區(qū)別。有時候,不同的規(guī)則會產(chǎn)生混淆。比如,在 PEAR 編碼標(biāo)準(zhǔn)中,前大括號“{”與控制結(jié)構(gòu)在同一行,但在函數(shù)定義中卻需要換行。

PEAR 風(fēng)格:

 
 
 
 
  1. function foo(){                     
  2. // 放在下一行[譯者注:示例中明明是放在與聲明同行的,可能是作者筆誤] 
  3.     if($maybe){      
  4.       // 放在同一行 
  5.         do_it_now(); 
  6.         again(); 
  7.     }else{ 
  8.        abort_mission(); 
  9.     } 
  10.     finalize(); 
  11. }  

另外,請注意,縮進(jìn)是用的 4 個空格而不是制表符。

這里是 Wikipedia 中不同縮進(jìn)風(fēng)格的示例。

3 – 避免顯而易見的注釋

注釋代碼非常棒;但是,如果注釋只是簡單的重復(fù)就顯得多余了。看看這個示例:

 
 
 
 
  1. // 獲取國家/地區(qū)代碼 
  2. $country_code = get_country_code($_SERVER['REMOTE_ADDR']); 
  3. // 如果國家/地區(qū)代碼是 US 
  4. if ($country_code == 'US'){ 
  5. // 在表單中顯示“州”輸入框 
  6. echo form_input_state(); 
  7. }  

如果文本是顯而易見的,真的沒必要在注釋里再寫一次。

如果你一定要在代碼里寫點注釋,可以把它們合并在一行:

 
 
 
 
  1. // 對美國用戶顯示“州”輸入框 
  2. $country_code = get_country_code($_SERVER['REMOTE_ADDR']); 
  3. if ($country_code == 'US'){ 
  4. echo form_input_state(); 
  5. }  

4 – 代碼分組

某些任務(wù)往往不是幾句代碼就能解決的,那***把這些任務(wù)代碼分為不同的代碼段,在它們之間添加一些空行。

下面是一個簡單的示例:

 
 
 
 
  1. // get list of forums 
  2. $forums = array(); 
  3. $r = mysql_query("SELECT id, name, description FROM forums"); 
  4.  
  5. while ($d = mysql_fetch_assoc($r)){ 
  6. $forums[] = $d; 
  7.  
  8. // load the templates 
  9. load_template('header'); 
  10. load_template('forum_list', $forums); 
  11. load_template('footer');  

在每段代碼前添加注釋可以加強(qiáng)視覺分離效果。

5 – 保持一致的命名規(guī)范

PHP 本身有時候并不遵循一致的命名規(guī)范:

  • strpos() vs. str_split()
  • imagetypes() vs. image_type_to_extension()

首先,名字應(yīng)該有單詞的邊界。下面是兩種流行的選擇:

  • 駝峰風(fēng)格(camelCase):除***個單詞外每個單詞的***個字母都大寫。
  • 下劃線(underscores): 在單詞間使用下劃線分隔,比如:mysql_real_escape_string()。

這一點與我前面提到使用不同縮進(jìn)風(fēng)格的情況相似。如果項目中已經(jīng)在使用某個約定,你應(yīng)該遵循它。另外,某些語言平臺往往會有一個特定的命名規(guī)范。比如在 Java 中,多數(shù)代碼使用駝峰命名風(fēng)格,而多數(shù) PHP 程序員使用下劃線命名風(fēng)格。

這些網(wǎng)絡(luò)也可以混合使得。有些開發(fā)者喜歡對過程函數(shù)和類使用下劃線風(fēng)格,但對類方法使用駝峰風(fēng)格:

 
 
 
 
  1. class Foo_Bar { 
  2.     publicfunctionsomeDummyMethod(){ 
  3. }  

再強(qiáng)調(diào)一下,沒有“***”的風(fēng)格,保持一致就好。

6 – DRY 原則

DRY 代表不要重復(fù)你勞動(Don’t Repeat Yourself)。也被稱為 DIE:復(fù)制是不可接受的(Duplication is Evil)。

該原則規(guī)定:

“每個知識必須在一個系統(tǒng)內(nèi)具有一個唯一的、明確的、權(quán)威的表示?!贝蠖鄶?shù)應(yīng)用程序(或通用的計算機(jī))的目標(biāo)是使重復(fù)的任務(wù)變得自動化。這個原則應(yīng)該在所有的代碼中保留,包括 Web 應(yīng)用程序中。同一段代碼不應(yīng)該一再地被重復(fù)。

例如,大多數(shù) Web 應(yīng)用程序由許多頁面組成。這些頁面很可能包含通用的元素。標(biāo)題和頁腳通常是***證明。將這些頁眉和頁腳在每個頁面中復(fù)制一份并不是一個好主意。 Jeffrey Way 在此解釋了如何在 CodeIgniter 中創(chuàng)建模板。

 
 
 
 
  1. $this->load->view('includes/header');    
  2. $this->load->view($main_content);    
  3. $this->load->view('includes/footer');  

7 – 避免深嵌套

過多的嵌套層次會使代碼變得難以閱讀和跟蹤

 
 
 
 
  1. functiondo_stuff(){ 
  2. // ... 
  3. if (is_writable($folder)){ 
  4.     if ($fp = fopen($file_path, 'w')){ 
  5.         if ($stuff = get_some_stuff()){ 
  6.             if (fwrite($fp, $stuff)){ 
  7. // ... 
  8.    } 
  9.       else 
  10.    { 
  11.     returnfalse; 
  12.    } 
  13.   } 
  14.   else 
  15. {  

為了提高可讀性,通常會通過修改代碼來減少嵌套的層級:

 
 
 
 
  1. functiondo_stuff(){ 
  2. // ... 
  3. if (!is_writable($folder)){ 
  4. returnfalse; 
  5. if (!$fp = fopen($file_path, 'w')){ 
  6. returnfalse; 
  7. if (!$stuff = get_some_stuff()){ 
  8. returnfalse; 
  9. if (fwrite($fp, $stuff)){ 
  10. // ... 
  11.   else 
  12. returnfalse; 
  13. }  

8 – 限制行長度

人眼在閱讀窄長的列式文本時感覺更舒適,這也是為什么報紙的文章都是這個樣子:

避免代碼行水平過長是一種良好的變成習(xí)慣

 
 
 
 
  1. //bad 
  2. $my_email->set_from('test@email.com')->add_to('programming@gmail.com')->set_subject('Methods Chained')->set_body('Some long message')->send();    
  3. // good 
  4. $my_email    
  5. ->set_from('test@email.com')     
  6.   ->add_to('programming@gmail.com')     
  7.   ->set_subject('Methods Chained')    
  8.   ->set_body('Some long message')    
  9.   ->send();    
  10. // bad 
  11. $query= "SELECT id, username, first_name, last_name, status FROM users LEFT JOIN user_posts USING(users.id, user_posts.user_id) WHERE post_id = '123'";    
  12. // good 
  13. $query= "SELECT id, username, first_name, last_name, status     
  14.   FROM users    
  15.   LEFT JOIN user_posts  
  16.   USING(users.id, user_posts.user_id)     
  17.   WHERE post_id = '123'";  

當(dāng)然,如果有人,比如 Vim 用戶,想要在終端窗口中閱讀你的代碼,***將代碼行的長度限制在 80 個字符左右。

9 – 文件和文件夾的組織

從技術(shù)上講,你可以在單個文件中編寫整個應(yīng)用程序的代碼。但是,這對閱讀和維護(hù)來說將是一個噩夢。

在我的***個編程項目中,我懂得了創(chuàng)建“包含文件”的作法。不過,我還沒有接觸過遠(yuǎn)程組織。我創(chuàng)建了一個“inc”文件夾,其中包含兩個文件:db.php 和 functions.php。隨著應(yīng)用的擴(kuò)展,functions 文件也變得龐大和不可維護(hù)。

***的方法之一就是使用框架或者模擬其文件夾結(jié)構(gòu)。下面是 CodeIgniter 的代碼布局:

10 – 一致的臨時變量命名

通常,變量應(yīng)該是描述性的,并且包含一個或多個單詞。但是,這并不一定適用于臨時變量。它們可以短到單個字符的長度。

對于具有相同作用的臨時變量,使用一致的命名是一個很好的做法。以下是我在代碼中常用的幾個示例:

 
 
 
 
  1. // $i for loop countersfor 
  2. ($i= 0; $i< 100; $i++) {        
  3.   // $j for the nested loop counters     
  4.   for($j= 0; $j< 100; $j++) {        
  5.   } 
  6. }    
  7. // $ret for return variables 
  8. functionfoo() {     
  9.  $ret['bar'] = get_bar();     
  10.  $ret['stuff'] = get_stuff();        
  11.  return$ret; 
  12. }    
  13. // $k and $v in foreachforeach 
  14. ($some_arrayas$k=> $v) {    
  15. }    
  16. // $q, $r and $d for mysql 
  17. $q= "SELECT * FROM table"; 
  18. $r= mysql_query($q); 
  19. while($d= mysql_fetch_assocr($r)) {   
  20. }    
  21. // $fp for file pointers\ 
  22. $fp= fopen('file.txt','w');  

探索 TDM 對于敏捷、DevOps 和持續(xù)交付中速度和質(zhì)量的必要性。與 CA 技術(shù)一起攜手合作。


分享文章:提升代碼可讀性的10個技巧
鏈接分享:http://www.dlmjj.cn/article/cojgcgi.html