久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java如何給變量取合適的命名

瀏覽:6日期:2022-08-22 08:09:35

一.變量命名風(fēng)格

變量命名風(fēng)格通常會(huì)根據(jù)不同的變量類型來(lái)區(qū)分,以Java語(yǔ)言為例,根據(jù)變量類型不同有兩種命名風(fēng)格:

1)類成員變量、局部變量

類成員變量、局部變量通常采用駝峰命名風(fēng)格,如下:

String userName;

2)靜態(tài)成員變量、枚舉值、常量

靜態(tài)成員變量、枚舉值、常量通常采用所有字母大寫、多個(gè)單詞以英文下劃線連接,如:

public static final int MAX_YEARS = 25;​// 建議枚舉類都以Enum結(jié)尾enum ColorEnum { RED(0, '紅色'), YELLOW(1, '黃色'), GREEN(2, '綠色'), WHITE(3, '白色'), BLACK(4, '黑色'); private int code; private String name;​ Color(int code, String name) { this.code = code; this.name = name; }}

二.變量命名最高境界

在函數(shù)命名那篇中我們說(shuō)的函數(shù)命名最高境界是見(jiàn)字如面,那么對(duì)于變量命名來(lái)說(shuō),最高境界是什么呢? 我認(rèn)為是:自解釋,即'代碼即注釋'。

為什么這么說(shuō)呢,因?yàn)橥ǔ?lái)說(shuō)一個(gè)函數(shù)是會(huì)有函數(shù)注釋的,即使函數(shù)名字取的不好,如果注釋寫的比較清楚,對(duì)于后續(xù)維護(hù)人員來(lái)說(shuō)也是了解函數(shù)具體功能的一種方式。

而變量則不同,在一個(gè)工程里面,變量的數(shù)量遠(yuǎn)遠(yuǎn)大于函數(shù)的數(shù)量,所以不太可能對(duì)于每個(gè)變量都去寫注釋,所以如果一個(gè)工程的變量命名很糟糕,那么對(duì)于后續(xù)維護(hù)人員來(lái)說(shuō)將是毀滅性的打擊,因?yàn)槊孔x到一個(gè)變量,可能就需要去猜測(cè)變量的含義,我想沒(méi)有哪個(gè)人愿意讀到這樣的代碼,永遠(yuǎn)記住一點(diǎn):'代碼是寫給人看的,不是寫給機(jī)器看的'。

譬如下面這段代碼的命名就非常糟糕:

ppn = (cpn > 1) ? (cpn - 1) : cpn;npn = (cpn < tpn) ? (cpn + 1) : tpn;p = new Page(ppn, cpn, npn, tpn);

上面這段代碼估計(jì)只有原作者清楚地知道各個(gè)變量的含義是啥了,

如果修改為下面這種寫法,可讀性會(huì)好很多,并且一目了然,很容易知道其大概意圖是計(jì)算分頁(yè)信息:

prePageNum = (curPageNum > 1) ? (curPageNum - 1) : curPageNum;nextPageNum = (curPageNum < totalPageNum) ? (curPageNum + 1) : totalPageNum;page = new Page(prePageNum, curPageNum, nextPageNum, totalPageNum);

三.變量命名最佳實(shí)踐

1)采用名詞或者形容詞來(lái)命名變量

變量一般情況下建議使用名詞、名字組合或者形容詞,因?yàn)樽兞恳话阈稳莸氖且环N事物或者事物的屬性,所以用名詞或者名詞組合更容易讓人理解,而形容詞一般用于bool類型的變量。

2)避免使用單字母變量,盡量細(xì)化變量含義

在程序中,盡量避免使用單字母變量,唯一可以接受使用單字母變量的場(chǎng)景只有for循環(huán),不過(guò)還是不太推薦在for循環(huán)中使用單字母變量(用pos、index比f(wàn)or循環(huán)的i、j、k要好很多)。

舉個(gè)例子,比如下面這行代碼:

double calConeVolume(double b, double d) {return Math.PI * b * b * d / 3;}

咋一看這個(gè)函數(shù)參數(shù)感覺(jué)挺清晰,但是一細(xì)看,b是什么?d又是什么?如果我要用這個(gè)函數(shù),該怎么傳參?估計(jì)大部人是一臉懵逼狀,只能進(jìn)去看實(shí)際的函數(shù)實(shí)現(xiàn)才知道b是圓錐體半徑,d是圓錐體高度;

那么怎么優(yōu)化這段代碼命名呢?其實(shí)很簡(jiǎn)單,稍微細(xì)化一下變量含義,讓變量名自己去表達(dá)實(shí)際意圖:

double calConeVolume(double radius, double height) {return Math.PI * radius * radius * height / 3;}

3)變量命名前后用詞需統(tǒng)一

在同一個(gè)工程或者一個(gè)場(chǎng)景下,變量命名風(fēng)格需前后統(tǒng)一,比如total和sum都能表示總計(jì)的意思,那么所有需要用到'總計(jì)'含義的地方要么全部使用total、要么全部使用sum。

保持前后命名風(fēng)格統(tǒng)一是保證工程代碼良好可讀性的關(guān)鍵保證。

4)集合變量用類型或者復(fù)數(shù)s作為后綴

在java中,有很多集合,比如List、Map、Set等,那么集合變量該怎么命名呢?

一般可采取兩種方式:

使用復(fù)數(shù)s結(jié)尾

List<Student> students = new ArrayList<>();

用集合類型作為后綴

List<Student> studentList = new ArrayList<>();

上面兩種方式均可,沒(méi)有比較明顯的偏好,根據(jù)實(shí)際場(chǎng)景決定。第一種方式相對(duì)更簡(jiǎn)潔,第二種在局部作用域里面有多種相關(guān)的集合變量時(shí)區(qū)分度更大,比如:

List<Student> studentList = new ArrayList<>();Map<Long, Student> studentMap = Maps.newHashMap();​for (Student stu : studentList) { studentMap.put(stu.getId, stu);}

我的建議是如果局部作用域只有一種類型的集合,那么推薦使用復(fù)數(shù)形式;如果局部作用域有多個(gè)相關(guān)的集合類型,那么推薦用類型結(jié)尾。

5)禁止使用is作為bool類型的類成員變量前置

在java中,禁止用is作為bool類型的類成員變量的前綴,因?yàn)閕s作為前綴會(huì)導(dǎo)致序列化/反序列出現(xiàn)問(wèn)題,阿里的java代碼規(guī)范中也明確提到了這一點(diǎn),所以在寫代碼的時(shí)候最好還是遵守公認(rèn)的規(guī)范,不然哪天說(shuō)不定就踩坑了。

6)盡量避免使用縮寫進(jìn)行命名

有些時(shí)候,變量名可能有點(diǎn)長(zhǎng),不利于代碼可讀性,因此很多時(shí)候在寫代碼的時(shí)候喜歡用縮寫來(lái)命名,但這個(gè)不是一個(gè)好的習(xí)慣,除非使用的縮寫是大家都會(huì)使用的約定俗稱的縮寫。

比如下面這個(gè)命名:

int averageStudentAge; => int avgStudentAge;

因?yàn)閍vg大家都知道是average的縮寫,所以這么寫問(wèn)題不大,不會(huì)引起歧義;

但是下面這種縮寫命名:

restmpcnt

就不是好的縮寫命名,因?yàn)椴煌娜碎喿x可能會(huì)有不同的理解:

res => response、resource、resulttmp => temporary、templatecnt => count、content、context

附上一些約定俗稱的縮寫:

全稱 縮寫 identification id average avg maximum max minimum min buffer buf error err message msg image img length len library lib password pwd position pos data transfer object dto view object vo

7)拋棄掉flag變量

國(guó)內(nèi)一些早期的教材上,到處充斥著各種flag風(fēng)格的變量,這種命名方式對(duì)于大型工程簡(jiǎn)直就是噩夢(mèng),比如:

int flag = getDoctorFlag(doctorId);if (flag == 1) {//....}

看到這段代碼,讀者會(huì)有疑問(wèn)flag變量的含義是什么?flag值為1的時(shí)候又代表什么含義?是醫(yī)生的值班/在崗狀態(tài)、還是醫(yī)生的身體狀態(tài)?估計(jì)讀者的內(nèi)心是崩潰的。

如果優(yōu)化成下面這種形式:

DutyStatus doctorDutyStatus = getDoctorDutyStatus(doctorId);if (doctorDutyStatus == DutyStatus.ONLINE) {// ...}

就比上面的形式清晰多了,很容易看出來(lái)判斷的是醫(yī)生的值班/在崗狀態(tài)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 日韩色在线 | 久久九九视频 | 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 91.成人天堂一区 | 在线观看成人 | 大香伊蕉在人线视频777 | 日韩欧美在线观看视频 | 久久久久久这里只有精品 | 黄网在线| 欧美激情欧美激情在线五月 | 国产免费一区二区三区 | 日韩成人免费av | 在线免费中文字幕 | zzzwww在线观看免 | 日韩高清一区二区 | 久久综合热 | 亚洲精品一区久久久久久 | 欧美亚洲一| 日韩区| 婷色综合 | 日韩一区二区在线免费 | 精品国产一区二区三区免费 | 九九热在线视频 | 欧美一区视频 | 日韩成人影院 | 国产一区二区三区久久久久久久久 | 91精品国产自产91精品 | www.一区 | 在线播放一区二区三区 | 欧美激情精品久久久久久变态 | 欧美寡妇偷汉性猛交 | 久久久久黄色 | 国产成人精品一区二区三区视频 | 夜夜爽网址| 亚洲精品影院 | 久久99国产精品免费网站 | 日韩精品一区二区三区在线 | 久久国产区 | 国产激情网址 | 欧美精品一二三区 | 午夜毛片|