日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编码之道:取个好名字很重要(转)

發布時間:2023/12/15 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编码之道:取个好名字很重要(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

代碼就是程序員的孩子,給“孩子”取個好聽的名字很重要!

  我們在項目開發中,接觸到的變量、函數、類多數都是項目自己定義的,往往都是為了解決一些特定的領域的問題,引入了各種各樣的概念,代碼里面的名字就對應著問題領域或方案領域的這些概念。所以,對于一個命名良好、代碼規范、設計簡潔的系統,要想非常快的理解一個系統,最直接的方式就是RTFC(Read The Fucking Code)。對于一個不斷演進的系統,代碼的可讀性至關重要,首要要解決的問題就是名字,變量名、函數名、類名等都需要仔細斟酌,認真對待,一個能夠簡潔,能夠清晰表達概念和意圖的名字就顯得尤為重要。

  閱讀《代碼整潔之道》這本書后發現其中說的內容在我們自己項目中比比皆是,隨便拿出一塊代碼都可以當做反面教材給大家講半天。長時間積累,導致代碼發霉變質,取名也是毫無章法,信手拈來。閱讀這樣的代碼,撞南墻的心都有了。下面結合自己項目中的問題和《代碼整潔之道》談談關于命名相關的原則。

  1. 原則:名副其實

  • 選名字是件嚴肅的事情,選個好名字很重要。
  • 如果名字需要注釋來補充,那就不是個好名字。
  • 最重要的是要名副其實,名字能表達出概念和意圖。

  BAD:

int t = currentTime.elapse(e); // 消逝的時間,以毫秒計 ... if (t > timeout_value) { Zebra::logger->debug("---一次循環用時 %u 毫秒-----", t); } GOOD:
int elapsed_ms = currentTime.elapse(e); ... if (elapsed_ms > timeout_value) {Zebra::logger->debug("-----一次循環用時 %u 毫秒---", elapsed_ms); } 2. 原則:避免誤導
  • 必須避免留下掩藏代碼本意的錯誤線索
  • 避免使用與本意相悖的詞
  • 提防使用不同之處較小的名稱
  • 拼寫前后不一致就是誤導

  BAD:

std::vector<int> account_list; // _list就是一個誤導, accounts會更好 bool sendToZoneServer(); // 和下面的函數差別很小 bool sendToZoneServers(); // sendToAllZoneServers會好點

  3. 原則:做有意義的區分

  • 代碼是寫給人看的,僅僅是滿足編譯器的要求,就會引起混亂。
  • 以數字系列命名(a1,a2,...),純屬誤導。
  • 無意義的廢話: a, an, the, Info, Data

  BAD:

void copy(char a1[], char a2[]) {for (size_t i = 0; a1[i] != '\0'; i++) a2[i] = a1[i]; }

  GOOD:

void copy(char source[], char dest[]) {for (size_t i = 0; source[i] != '\0'; i++) dest[i] = source[i]; }

  4. 原則:使用可讀的名字

  • 避免過度使用縮寫
  • 可讀的名字交流方便

  猜一猜下面的類是干什么的?和別人怎么說這幾個類?

  根據這些簡直變態的縮寫,如果沒有注釋基本上很難知道是干什么的,當你和別人交流的時候,你就不得不一個一個字母來念“X-L-Q-Y”、“L-T-Q Manager”,鬼知道你說的是什么?PS. XLQY-XianLvQiYuan(仙履奇緣), LTQ-LiaoTianQun(聊天群),有這樣的名字也是醉了。

  BAD:

class XLQY; class FCNV; class LTQManager;

  5. 原則:使用可搜索的名字

  • 避免使用Magic Number
  • 避免使用單字母,或出現頻率極高的短字母組合(注意度的把握)。

  BAD:

if (obj->base->id == 4661) // 4661是啥玩意? { usetype = Cmd::XXXXXXX; } int e; // 怎么查找? XXXX:iterator it; // 變量作用的范圍比較大的時候,也不見得是個好名字

  GOOD:

#define OJBECT_FEEDBACK_CARD 4661 if (OJBECT_FEEDBACK_CARD == obj->base->id) {usetype = Cmd::XXXXXXX; }

  6. 原則:名字盡量來自解決方案領域或問題領域

  • 使用解決方案領域名稱

  寫代碼的同學多數都是都出自CS,術語、算法名、模式名、數學術語盡管用。如AccountVisitor:Visitor模式實現的Account類。

  • 使用問題領域的名稱

  我們代碼里面多數都是這些名稱,不明白找策劃問問,基本上都是功能相關的名稱。

  7. 原則:適當使用有意義的語境

  • 良好命名的類、函數、名稱空間來放置名稱,給讀者提供語境。
  • 只有兩三個變量,給名稱前加前綴。
  • 事不過三,變量超過三個考慮封裝成概念,添加struct或class。

  BAD:

// 看著整齊?使用方便? DWORD love_ensure_type_; //當前的愛情保險類型 DWORD love_ensure_ret_; //購買愛情保險回應標示 DWORD love_ensure_total_; //現在已經蓋章數目 DWORD love_ensure_..._; //... DWORD love_ensure_..._; //...

  最后:我們的C++命名規范

  • 文件名:

    • 首字母大寫,多個詞組合起來
    • 如:?SceneUser.h, Sept.h
  • 類名/名稱空間名:

    • 首字母大寫,多個詞組合起來
    • 使用名詞或名詞詞組
    • 避免使用C前綴,如:?CSept
    • 如:?SceneUser, SeptWar
  • 函數名:

    • 首字母小寫
    • 使用動詞或動詞詞組
    • 避免使用孤立的全局函數,可以封裝在類或名稱空間里面
    • get, set, is前綴的使用
    • 如:?fuckYou(), levelup()
  • 變量名:

    • 全部字母小寫,多個詞以下劃線分隔。
    • 私有成員變量加后綴_,公有變量不用。
    • 避免使用孤立的全局變量,可以封裝在類或名稱空間里面。
    • 如:?quest_id, questid_

  取名是一件嚴肅的事情,我們需要認真對待,名字代表著一個個概念,名字代表著你想表達的意圖,好名字是可讀代碼的首要條件:

  • 寫下任何一行代碼的時候,心里都要想著自己的代碼是給別人看的。
  • 為函數、變量、類取個好名字,遵循規范和原則。
  • 見到不符合規范和原則的名字,確毫不留情的干掉它,特別是功能性的代碼。

http://kb.cnblogs.com/page/517741/

總結

以上是生活随笔為你收集整理的编码之道:取个好名字很重要(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。