亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

代碼中到底應不應當寫注釋?

2024-07-21 02:02:38
字體:
來源:轉載
供稿:網友

當很多前輩教育后輩應當多寫注釋的時候,當網絡上充滿了有關程序員從不寫注釋的段子的時候,這是一個非常有爭議的話題。作為一個標題黨,容我先修正一下我的觀點:我認為如果代碼寫得足夠好,那么大多數注釋是多余的,我們應該通過寫出更好的代碼來代替更多注釋。

注釋的確有其用途,但大部分情況下,程序員在濫用注釋。我是反對夾雜在代碼間的注釋的,我認為注釋應當從代碼中獨立出來――通常被稱為文檔。

請看下面一段代碼。

復制代碼 代碼如下:

/* /static/market/checkout.js

2014.7.2 create by orzfly
2014.7.29 update by jysperm: fixbugs

TODO: 這段代碼中注釋太多了,需要移除一些 -- jysperm
*/

var raw_products = req.query['products'].split(',');

// 商品 ID 的數組
var products = []

// 過濾每個參數
for(var i = 0, i < raw_products.length, i++) {
    if (!raw_products[i])
        return;

    // 前端傳來的數據中居然會有空格
    if (!raw_products[i].trim())
        return

    /* 2014.7.22: 現在可以使用非數字 ID 了
    // 略過非數字條目
    if (isNan(raw_products[i].trim().toFixed()))
        return;
    */

    products.push(raw_products[i].trim().toFixed());
}

// 總錢數
var sum = 0;

// 計算每個商品的總錢數
for(var i = 0, i < products.length, i++) {
    // 從數據庫中查商品信息
    var data = db.product.byID(products[i]);

    // TODO: 誰來寫一下沒查到商品的情況

    // 把商品的價格加到總錢數上, a += b 是 a = a + b 的縮寫
    sum += data.price;
}

你居然花了一半的時間在讀注釋上面,這是多么浪費生命的事情,在代碼中每加一行注釋,都會增加代碼的閱讀成本――即使閱讀者已經了解了注釋所要傳達的精神;同時也會增加維護成本:修改這段代碼的人不得不連同注釋一起修改――而且你不能確定他到底會不會這么做。

所以只有當非常必要的情況下,才應該添加注釋,而且應當言簡意賅。注釋不應當解釋一段代碼在做什么,因為這是每個合格的程序員都應該知道的事情,而是應該解釋這段代碼為什么要這樣做。

由此引出幾種明顯不應該添加的注釋:

本應由版本控制系統記錄的信息、對代碼的評論,以及不是很重要的 TODO.

代碼并不是全部,一個但凡靠譜一點的項目,都應當有自己的版本控制系統,除了記錄代碼差異之外,還應該有工單和 Issue 的功能。
閱讀代碼的人通常不需要了解幾個程序員之間的恩怨,很多時候也不關心這段代碼的歷史,這些信息只會把代碼拖得越來越長。

廢棄的代碼

被棄用的代碼應該被刪掉,這些代碼會非常影響閱讀,而且它們一般又很長。
在絕大多數情況下,被棄用的代碼不會重新派上用場,即使出現了少數情況,你也可以從版本控制系統中找到它們。

對變量和函數名的解釋

這種情況下顯然你需要一個更恰當的名字,如果這個標識符有一個比較小的作用于,你可以使用一個比較長的名字以便容納更多信息。

例如上文中的:

products 應改為 products_id
sum 應改為 total_amount
data 應改為 product_record
對語法的解釋,以及顯而易見的事情

例如上文中的「把商品的價格加到總錢數上, a += b 是 a = a + b 的縮寫」,這顯然是任何一個人都知道的事情。

也許有人愿意通過寫這樣的注釋來梳理思路:

復制代碼 代碼如下:

// 過濾參數:
//    去掉 ID 里的空格
//    去掉非數字 ID
// 循環每一個商品:
//    去數據庫查記錄
//    把商品的價格加到總錢數上

但是當代碼寫完的時候記得刪掉。

對邏輯塊的概括

例如上文中的「過濾每個參數」和「計算每個商品的總錢數」,這情況下通常是你沒有對邏輯進行抽象,具體表現就是像下面這樣:

復制代碼 代碼如下:

// 首先有 25 行代碼去做事情 A
// 然后有 5 行代碼去做事情 B
// 這里有 90 行代碼去做事情 C
// 最后有 45 行代碼去做事情 D

這導致你需要一些注釋來分割這四個部分。如果這四個部分都是一個函數調用的話,那么函數名本身就是對邏輯的一種解釋,讀者可以快速地找到函數 B, 而不必在前 25 行中搜索做事情 B 的五行代碼。

綜上,我對這段代碼的改善意見如下:

復制代碼 代碼如下:

var filterProductID = function(raw_products_id) {
    result = []

    raw_products_id.forEach(function(product_id) {
        if (product_id and product_id.trim())
            products_id.push(product_id.trim().toFixed());
    });

    return result;
};

var getPriceOfProduct = function(id) {
    var product_record = db.product.byID(products[i]);

    if (product_record)
        return product_record.price;
    else
        return 0;
};

var products_id = filterProductID(req.query['products'].split(','));
var tatol_amount = 0;

products_id.forEach(function(product_id) {
    tatol_amount += getPriceOfProduct(product_id);
});

雖然我在以一段虛構的,刻意編造的代碼來佐證我的觀點,但我相信在實際的項目中,同樣可以通過改善代碼來減少注釋,而且總體上來講會節約更多的時間和精力。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲人成在线观看| 中文字幕视频一区二区在线有码| 久热精品在线视频| 九九综合九九综合| 热久久视久久精品18亚洲精品| 亚洲国产小视频| 91久久国产婷婷一区二区| 色妞色视频一区二区三区四区| 国产精品日韩欧美综合| 91中文字幕一区| 久久精品视频亚洲| 欧美成人午夜影院| 91麻豆国产精品| 色偷偷av一区二区三区乱| 欧美国产一区二区三区| 欧美在线视频一区二区| 在线视频日韩精品| 国产精品精品一区二区三区午夜版| 九九九久久国产免费| 久久影院免费观看| 九色精品免费永久在线| 欧美午夜www高清视频| 国产精品九九久久久久久久| 欧美另类99xxxxx| 色播久久人人爽人人爽人人片视av| 国产一区二区三区在线免费观看| 日韩欧美一区二区三区| 亚洲国产中文字幕久久网| 亚洲精品中文字幕有码专区| 国产97在线|亚洲| 97人人模人人爽人人喊中文字| 亚洲自拍偷拍在线| 欧美电影免费观看| 国产精品人成电影在线观看| 综合国产在线观看| 日本欧美国产在线| 亚洲视频在线观看免费| 国产成人精品在线视频| 国产成人一区二区三区| 日韩精品福利网站| 国产成人福利夜色影视| 日韩第一页在线| 夜夜狂射影院欧美极品| 成人亚洲综合色就1024| 国产精品91久久| 91精品视频大全| 欧美在线观看网址综合| 国产精品久久久久久婷婷天堂| 大量国产精品视频| 国产精品国产三级国产aⅴ浪潮| 26uuu亚洲国产精品| 亚洲激情免费观看| 精品视频在线播放色网色视频| 亚洲人成电影网站色xx| 国产精品欧美日韩久久| 91理论片午午论夜理片久久| 国产精品视频色| 欧美激情视频免费观看| 国产亚洲精品久久久久动| 日韩av片免费在线观看| 深夜福利国产精品| 91免费观看网站| 日本精品久久电影| 欧美午夜xxx| 91久久久久久久久久久久久| 91高清视频免费观看| 欧美电影院免费观看| 精品久久久久久久久中文字幕| 国产精品一区二区三区久久| 亚洲字幕在线观看| 亚洲人成电影在线观看天堂色| 亚洲伊人久久大香线蕉av| 成人精品一区二区三区| 黑人巨大精品欧美一区二区一视频| 国产91精品久久久久久久| 精品一区精品二区| 欧美天天综合色影久久精品| 国产成人精品久久二区二区| 北条麻妃99精品青青久久| 欧美亚洲国产视频| 精品无人区太爽高潮在线播放| 亚洲欧美国产精品va在线观看| 国产成人91久久精品| 国产精品扒开腿做| 亚洲v日韩v综合v精品v| 亚洲精品久久久一区二区三区| 国产精品视频免费在线观看| 欧美精品激情blacked18| 欧美日韩国产中文字幕| 亚洲精品一区二区三区不| 欧美专区在线播放| 久久久在线观看| 色综合视频网站| 81精品国产乱码久久久久久| 亚洲国内精品视频| 国自产精品手机在线观看视频| 欧美又大粗又爽又黄大片视频| 亚洲人精品午夜在线观看| 亚洲视频自拍偷拍| 国产精品久久久久久久久久东京| 亚洲女人天堂色在线7777| 国产精品美腿一区在线看| 亚洲白虎美女被爆操| 国产精品专区一| 国产精品96久久久久久又黄又硬| 精品国产精品自拍| 日韩av电影院| 精品久久久久久中文字幕一区奶水| 亚洲国产精品va在线看黑人| 国产精品久久久久av免费| 国产精品久久久久一区二区| 日本免费在线精品| 亚洲国产精品va在看黑人| 97人洗澡人人免费公开视频碰碰碰| 日本精品视频在线播放| 久久av.com| 2019亚洲男人天堂| 欧美丝袜第一区| 国产日韩精品电影| 日韩有码在线观看| 亚洲精品福利在线观看| 都市激情亚洲色图| 日韩欧美国产骚| 日韩av123| 91av在线播放视频| 国内精久久久久久久久久人| 亚洲高清av在线| 欧美另类精品xxxx孕妇| 欧美黑人巨大精品一区二区| 2018国产精品视频| 日本中文字幕不卡免费| 91国语精品自产拍在线观看性色| 日韩综合视频在线观看| 国产精品第一第二| 国外成人在线直播| 欧美一级黄色网| 亚洲欧洲在线看| 搡老女人一区二区三区视频tv| 亚洲欧美日韩精品久久| 永久免费精品影视网站| 91久久在线播放| 国产精品久久久久久久美男| 亚洲毛片在线免费观看| 国产精品永久免费在线| 91精品视频专区| 茄子视频成人在线| 中文字幕久热精品在线视频| 亚洲国产精品悠悠久久琪琪| 久久6免费高清热精品| 九九久久久久久久久激情| 欧美日韩国产一中文字不卡| 波霸ol色综合久久| 日韩免费观看网站| 精品一区精品二区| 欧美一级淫片videoshd| 欧美日韩午夜激情| 国产精品自产拍在线观看中文| 亚洲男子天堂网| 久久免费视频在线| 久久天堂av综合合色| 欧美一区二区三区精品电影| 欧美丰满少妇xxxx| 7m第一福利500精品视频| 日韩精品免费电影|