<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          令人頭疼的代碼命名規(guī)范……

          共 4168字,需瀏覽 9分鐘

           ·

          2020-06-27 23:20

          6252576716c5b4bbd3994c62074e294a.webp


          程序猿聲

          代碼黑科技的分享區(qū)

          30e1b9f85b85bf02b1e20acc5929f785.webp?前言

          關(guān)于代碼命名,我相信是經(jīng)常困擾很多小伙伴的一個(gè)問(wèn)題,尤其是對(duì)于強(qiáng)迫癥晚期患者。怎么說(shuō)呢,每次小編在寫代碼之前,總會(huì)在想啊想啊,用什么命名法好呢?對(duì)于經(jīng)常在C++、Java、Python等主流語(yǔ)言上切換的強(qiáng)迫癥來(lái)說(shuō),換個(gè)語(yǔ)言換種命名風(fēng)格簡(jiǎn)直不要太混亂。

          今天就來(lái)梳理一下常見的代碼命名規(guī)范以及適用范圍吧。

          常見命名規(guī)范

          為什么需要命名規(guī)范呢?世界級(jí)軟件大師 Martin Fowler 大神都說(shuō)過(guò) CS 領(lǐng)域有兩大最難的事情,一是緩存失效,一是程序命名。

          47cfe99fdeef18712159367a4a9e8f65.webp

          《Clean Code》這本書明確指出:

          代碼的注釋不是越詳細(xì)越好。實(shí)際上好的代碼本身就是注釋,我們要盡量規(guī)范和美化自己的代碼來(lái)減少不必要的注釋。若編程語(yǔ)言足夠有表達(dá)力,就不需要注釋,盡量通過(guò)代碼來(lái)闡述。

          要想讓你的編程語(yǔ)言足夠有表達(dá)力,良好的命名規(guī)范是必不可少的。同時(shí),花幾分鐘學(xué)學(xué)規(guī)范的命名,也能讓你的代碼看起來(lái)賞心悅目,何樂(lè)而不為呢。

          1. 駝峰命名法(CamelCase)

          駱駝式命名法(Camel-Case)又稱駝峰式命名法,是電腦程式編寫時(shí)的一套命名規(guī)則(慣例)。正如它的名稱CamelCase所表示的那樣,是指混合使用大小寫字母來(lái)構(gòu)成變量和函數(shù)的名字。程序員們?yōu)榱俗约旱拇a能更容易的在同行之間交流,所以多采取統(tǒng)一的可讀性比較好的命名方式。

          它又可以分為以下幾種。

          小駝峰命名法(lowerCamelCase)

          除第一個(gè)單詞之外,其他單詞首字母大寫。方法名、參數(shù)名、成員變量、局部變量需要使用小駝峰命名法(lowerCamelCase)。比如:

          getUserInfo()
          createCustomThreadPool()
          findAllByUserName(String?userName)
          TaskRepository?taskRepository;

          大駝峰命名法(CamelCase)

          相比小駝峰法,大駝峰法(即帕斯卡命名法)把第一個(gè)單詞的首字母也大寫了。常用于類名,命名空間等。如:

          class?TaskDateToSend{}
          class?TaskLabelToSend{}
          SettingRepository

          2. 蛇形命名法(snake_case)

          蛇形法是全由小寫字母和下劃線組成,在兩個(gè)單詞之間用下滑線連接即可。測(cè)試方法名、常量、枚舉名稱需要使用蛇形命名法(snake_case)。如:

          first_name
          last_name
          MAX_ITERATION
          LAST_DATA

          3. 串式命名法(kebab-case)

          在串式命名法中,各個(gè)單詞之間通過(guò)下劃線“-”連接,比如:

          hello-world
          first-project

          建議項(xiàng)目文件夾名稱使用串式命名法(kebab-case),比如 dubbo 項(xiàng)目的各個(gè)模塊的命名是下面這樣的:

          69e70b350c31ab3ddab25f639978f89f.webp

          總結(jié)一下

          ebe5788f53235ca0b4f4f1eb67e54eee.webp語(yǔ)言場(chǎng)景

          給出各個(gè)場(chǎng)景下的命名規(guī)則,大家要養(yǎng)成習(xí)慣。事實(shí)上,如果經(jīng)常在各個(gè)語(yǔ)言上切換的話,真的可能搞混。所以今天就Mark一下吧。

          Java命名規(guī)范

          總體命名規(guī)范

          • 類名需要使用大駝峰命名法(UpperCamelCase)風(fēng)格。
          • 方法名、參數(shù)名、成員變量、局部變量需要使用小駝峰命名法(lowerCamelCase)。
          • 測(cè)試方法名、常量、枚舉名稱需要使用蛇形命名法(snake_case) ,比如test_get_user()、TIME_LIMIT。并且,測(cè)試方法名稱要求全部小寫,常量以及枚舉名稱需要全部大寫。
          • 項(xiàng)目文件夾名稱使用串式命名法(kebab-case),比如dubbo-registry。
          • 包名統(tǒng)一使用小寫,盡量使用單個(gè)名詞作為包名,各個(gè)單詞通過(guò) "." 分隔符連接,并且各個(gè)單詞必須為單數(shù)。
          • 抽象類命名使用 Abstract 開頭。如:public abstract class AbstractClient extends AbstractEndpoint{}。
          • 異常類命名使用 Exception 結(jié)尾。如:public class NoSuchMethodException extends RuntimeException{}。
          • 測(cè)試類命名以它要測(cè)試的類的名稱開始,以 Test 結(jié)尾。如:public class AnnotationUtilsTest{}。

          包名命名規(guī)范

          Java的包名由小寫單詞組成,包的路徑符合所開發(fā)的系統(tǒng)模塊的定義,以便通過(guò)包名可得知其屬于哪個(gè)模塊,從而方便到對(duì)應(yīng)包里找相應(yīng)的實(shí)現(xiàn)類。

          常規(guī)包名

          為了保障每個(gè)Java Package命名的唯一性,在Java編程規(guī)范中要求開發(fā)人員在自己定義的包名前加上唯一的前綴.由于互聯(lián)網(wǎng)上的域名稱是不會(huì)重復(fù)的,所以多數(shù)開發(fā)人員采用自己公司在互聯(lián)網(wǎng)上的域名稱作為自己程序包的唯一前綴.例如 : com.sun.swt...

          • 公司項(xiàng)目 com : 公司項(xiàng)目,copyright由項(xiàng)目發(fā)起的公司所有. 包名 : com.公司名.項(xiàng)目名.模塊名..
          • 團(tuán)隊(duì)項(xiàng)目 team : 團(tuán)隊(duì)項(xiàng)目,指由團(tuán)隊(duì)發(fā)起,并由該團(tuán)隊(duì)開發(fā)的項(xiàng)目,copyright屬于該團(tuán)隊(duì)所有. 包名 : team.團(tuán)隊(duì)名.項(xiàng)目名.模塊名..

          自定義包名

          一般公司命名為com.公司名.項(xiàng)目名.模塊名....那我們個(gè)人的項(xiàng)目又怎么命名呢?個(gè)人的英語(yǔ)單詞有individual、personal、private、one-man,進(jìn)一步對(duì)以上四個(gè)單詞詞意進(jìn)行分析并在保證了唯一性,繼而使用每個(gè)單詞的前4個(gè)字母作為前綴,與com也做了區(qū)分.示例如下所示:

          • indi : 個(gè)體項(xiàng)目,指?jìng)€(gè)人發(fā)起,但非自己獨(dú)自完成的項(xiàng)目,可公開或私有項(xiàng)目,copyright主要屬于發(fā)起者. 包名 :indi.發(fā)起者名.項(xiàng)目名.模塊名..
          • pers : 個(gè)人項(xiàng)目,指?jìng)€(gè)人發(fā)起,獨(dú)自完成,可分享的項(xiàng)目,copyright主要屬于個(gè)人.包名 : pers.個(gè)人名.項(xiàng)目名.模塊名..
          • priv : 私有項(xiàng)目,指?jìng)€(gè)人發(fā)起,獨(dú)自完成,非公開的私人使用的項(xiàng)目,copyright屬于個(gè)人.包名 : priv.個(gè)人名.項(xiàng)目名.模塊名..
          • onem : 與indi相同,推薦使用indi.

          Python命名規(guī)范

          :總是使用首字母大寫單詞串。如MyClass、ClassName。內(nèi)部類可以使用額外的前導(dǎo)下劃線。

          函數(shù)和方法:小寫+下劃線,如method_name。

          函數(shù)參數(shù):小寫+下劃線,如function_parameter_name。如果一個(gè)函數(shù)的參數(shù)名稱和保留的關(guān)鍵字沖突,通常使用一個(gè)后綴下劃線,如random_。

          全局變量:對(duì)于from M import *導(dǎo)入語(yǔ)句,如果想阻止導(dǎo)入模塊內(nèi)的全局變量可以使用舊有的規(guī)范,在全局變量上加一個(gè)前導(dǎo)的下劃線,如_var_name。應(yīng)避免使用全局變量

          變量:小寫,由下劃線連接各個(gè)單詞。如color、this_is_a_variable。注意

          1. 不論是類成員變量還是全局變量,均不使用 m 或 g 前綴。
          2. 私有類成員使用單一下劃線前綴標(biāo)識(shí)。
          3. 變量名不應(yīng)帶有類型信息,因?yàn)镻ython是動(dòng)態(tài)類型語(yǔ)言。如 iValue、names_list、dict_obj 等都是不好的命名。

          常量:常量名所有字母大寫,由下劃線連接各個(gè)單詞如MAX_OVERFLOW,TOTAL。

          異常:以“Error”作為后綴。

          文件名:全小寫,可使用下劃線

          :應(yīng)該是簡(jiǎn)短的、小寫的名字。如果下劃線可以改善可讀性可以加入,如mypackage。

          模塊:與包的規(guī)范同,如mymodule。

          縮寫:命名應(yīng)當(dāng)盡量使用全拼寫的單詞,縮寫的情況有如下兩種:

          1. 常用的縮寫,如XML、ID等,在命名時(shí)也應(yīng)只大寫首字母,如XmlParser。
          2. 命名中含有長(zhǎng)單詞,對(duì)某個(gè)單詞進(jìn)行縮寫。這時(shí)應(yīng)使用約定成俗的縮寫方式。例如:function 縮寫為 fn text 縮寫為 txt object 縮寫為 obj count 縮寫為 cnt number 縮寫為 num,等。

          前導(dǎo)后綴下劃線

          • 一個(gè)前導(dǎo)下劃線:表示非公有。
          • 一個(gè)后綴下劃線:避免關(guān)鍵字沖突。
          • 兩個(gè)前導(dǎo)下劃線:當(dāng)命名一個(gè)類屬性引起名稱沖突時(shí)使用。
          • 兩個(gè)前導(dǎo)和后綴下劃線:“魔”(有特殊用圖)對(duì)象或者屬性,例如__init__或者_(dá)_file__。絕對(duì)不要?jiǎng)?chuàng)造這樣的名字,而只是使用它們。注意:關(guān)于下劃線的使用存在一些爭(zhēng)議。

          特定命名方式:主要是指 xxx 形式的系統(tǒng)保留字命名法。項(xiàng)目中也可以使用這種命名,它的意義在于這種形式的變量是只讀的,這種形式的類成員函數(shù)盡量不要重載。如 class Base(object): def init(self, id, parent = None): self.id = id self.parent = parent def message(self, msgid): 其中 idparentmessage 都采用了系統(tǒng)保留字命名法。

          Python推薦使用蛇形命名法,因?yàn)?Python 是蟒蛇啊,理所當(dāng)然是用蛇形命名……

          綜合各方面考慮,駝峰式命名法比較好,優(yōu)勢(shì)明顯,事實(shí)上,目前使用駝峰式命名法的人也真的越來(lái)越多了。

          最后,大家是在命名有困難可以上一個(gè)神奇的網(wǎng)站:

          https://unbug.github.io/codelf/

          647f39dd9d0edd0090a0af1c9d770898.webp

          reference

          • 三種編程命名規(guī)則:駝峰命名法 (壹):https://www.jianshu.com/p/de0016754d8a
          • 因?yàn)槊恢鞴躣iss無(wú)數(shù)次。簡(jiǎn)單聊聊編程最頭疼的事情之一:命名:https://www.toutiao.com/i6836703460176429582/
          • Java 命名規(guī)范:https://www.cnblogs.com/wkfvawl/p/12172756.html
          • Python 為什么推薦蛇形命名法?:https://www.cnblogs.com/pythonista/p/13155167.html


          推薦閱讀:

          干貨 | 想學(xué)習(xí)優(yōu)化算法,不知從何學(xué)起?

          干貨 | 運(yùn)籌學(xué)從何學(xué)起?如何快速入門運(yùn)籌學(xué)算法?

          干貨 | 學(xué)習(xí)算法,你需要掌握這些編程基礎(chǔ)(包含JAVA和C++)

          干貨 | 算法學(xué)習(xí)必備訣竅:算法可視化解密

          干貨 | 模擬退火、禁忌搜索、迭代局部搜索求解TSP問(wèn)題Python代碼分享
          記得點(diǎn)個(gè)在看支持下哦~cba791282c11a777c4d6c971503084aa.webp
          瀏覽 121
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  白天操夜夜操 | 亚洲三级视频在线观看 | 成人网在线 | 国产大尺度在线观看 | 囯产精品久久久久久久久久青青 |