最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年10月27日 10:08:58   作者:Matrix海子  
這篇文章主要介紹了Java如何給變量取合適的命名,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

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

  變量命名風(fēng)格通常會(huì)根據(jù)不同的變量類型來區(qū)分,以Java語言為例,根據(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ù)命名那篇中我們說的函數(shù)命名最高境界是見字如面,那么對(duì)于變量命名來說,最高境界是什么呢? 我認(rèn)為是:自解釋,即"代碼即注釋"。

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

  而變量則不同,在一個(gè)工程里面,變量的數(shù)量遠(yuǎn)遠(yuǎn)大于函數(shù)的數(shù)量,所以不太可能對(duì)于每個(gè)變量都去寫注釋,所以如果一個(gè)工程的變量命名很糟糕,那么對(duì)于后續(xù)維護(hù)人員來說將是毀滅性的打擊,因?yàn)槊孔x到一個(gè)變量,可能就需要去猜測變量的含義,我想沒有哪個(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ì)算分頁信息:

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

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

1)采用名詞或者形容詞來命名變量

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

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

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

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

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

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

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

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

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

  在同一個(gè)工程或者一個(gè)場景下,變量命名風(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<>();

  上面兩種方式均可,沒有比較明顯的偏好,根據(jù)實(shí)際場景決定。第一種方式相對(duì)更簡潔,第二種在局部作用域里面有多種相關(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)問題,阿里的java代碼規(guī)范中也明確提到了這一點(diǎn),所以在寫代碼的時(shí)候最好還是遵守公認(rèn)的規(guī)范,不然哪天說不定就踩坑了。

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

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

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

int averageStudentAge; => int avgStudentAge;

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

  但是下面這種縮寫命名:

res
tmp
cnt

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

res => response、resource、result
tmp => temporary、template
cnt => 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變量

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

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

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

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

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

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

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java 排序算法之冒泡排序

    java 排序算法之冒泡排序

    這篇文章主要介紹了java 排序算法之冒泡排序,文中運(yùn)用大量的代碼講解相關(guān)知識(shí),非常詳細(xì),感興趣的小伙伴可以參考一下
    2021-09-09
  • SpringBoot開啟server:compression:enabled(Illegal character ((CTRL-CHAR, code 31)))的問題解決

    SpringBoot開啟server:compression:enabled(Illegal characte

    本文主要介紹了SpringBoot開啟server:compression:enabled(Illegal character ((CTRL-CHAR, code 31)))的的問題解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • Spring Boot高級(jí)教程之Spring Boot連接MySql數(shù)據(jù)庫

    Spring Boot高級(jí)教程之Spring Boot連接MySql數(shù)據(jù)庫

    這篇文章主要為大家詳細(xì)介紹了Spring Boot高級(jí)教程之Spring Boot連接MySql數(shù)據(jù)庫,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 關(guān)于mybatis mapper類注入失敗的解決方案

    關(guān)于mybatis mapper類注入失敗的解決方案

    這篇文章主要介紹了關(guān)于mybatis mapper類注入失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Java基礎(chǔ)之詳細(xì)總結(jié)五種常用運(yùn)算符

    Java基礎(chǔ)之詳細(xì)總結(jié)五種常用運(yùn)算符

    在通常代碼邏輯處理中,我們常常都會(huì)使用到運(yùn)算符,今天我們就詳細(xì)了解一下運(yùn)算符的使用以及分類.運(yùn)算符是對(duì)常量或者變量進(jìn)行操作的符號(hào),它分為算術(shù)運(yùn)算符,賦值運(yùn)算符,比較運(yùn)算符,邏輯運(yùn)算符以及位運(yùn)算符.需要的朋友可以參考下
    2021-05-05
  • java.text.DecimalFormat類十進(jìn)制格式化

    java.text.DecimalFormat類十進(jìn)制格式化

    這篇文章主要為大家詳細(xì)介紹了java.text.DecimalFormat類十進(jìn)制格式化的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • logback-spring.xml的配置及示例詳解(直接復(fù)制粘貼可用)

    logback-spring.xml的配置及示例詳解(直接復(fù)制粘貼可用)

    在使用logback作為日志框架時(shí),可以創(chuàng)建一個(gè)名為logback-spring.xml的配置文件來自定義日志輸出的格式和方式,下面這篇文章主要給大家介紹了關(guān)于logback-spring.xml的配置及示例詳解的相關(guān)資料,文中的代碼直接復(fù)制粘貼可用,需要的朋友可以參考下
    2024-01-01
  • Java排序的那些事之sort方法的使用詳解

    Java排序的那些事之sort方法的使用詳解

    sort方法用于對(duì)數(shù)組的元素進(jìn)行排序。排序順序可以是字母或數(shù)字,并按升序或降序。默認(rèn)排序順序?yàn)榘醋帜干?,?dāng)數(shù)字是按字母順序排列時(shí)"40"將排在"5"前面。使用數(shù)字排序,你必須通過一個(gè)函數(shù)作為參數(shù)來調(diào)用。這些說起來可能很難理解,你可以通過本篇文章進(jìn)一步了解它
    2021-09-09
  • Spring依賴注入中的@Resource與@Autowired詳解

    Spring依賴注入中的@Resource與@Autowired詳解

    這篇文章主要介紹了Spring依賴注入中的@Resource與@Autowired詳解,提到Spring依賴注入,大家最先想到應(yīng)該是@Resource和@Autowired,對(duì)于Spring為什么要支持兩個(gè)這么類似的注解卻未提到,屬于知其然而不知其所以然,本文就來做詳細(xì)講解,需要的朋友可以參考下
    2023-09-09
  • Springboot項(xiàng)目消費(fèi)Kafka數(shù)據(jù)的方法

    Springboot項(xiàng)目消費(fèi)Kafka數(shù)據(jù)的方法

    本文詳細(xì)介紹了如何在Spring Boot項(xiàng)目中配置和實(shí)現(xiàn)Kafka消費(fèi)者和生產(chǎn)者,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-01-01

最新評(píng)論

申扎县| 庄浪县| 四会市| 黄梅县| 河东区| 宽甸| 绥芬河市| 太仓市| 田东县| 恭城| 阿拉善右旗| 富裕县| 剑川县| 新民市| 永丰县| 新津县| 甘孜县| 平塘县| 绵竹市| 上栗县| 遵化市| 湘阴县| 张家界市| 漠河县| 宁陵县| 缙云县| 县级市| 海口市| 淳化县| 临西县| 营口市| 平泉县| 板桥市| 星子县| 海原县| 盘山县| 南宫市| 五华县| 天气| 河源市| 神木县|