电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

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

一.變量命名風格

變量命名風格通常會根據不同的變量類型來區分,以Java語言為例,根據變量類型不同有兩種命名風格:

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

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

String userName;

2)靜態成員變量、枚舉值、常量

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

public static final int MAX_YEARS = 25;​// 建議枚舉類都以Enum結尾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; }}

二.變量命名最高境界

在函數命名那篇中我們說的函數命名最高境界是見字如面,那么對于變量命名來說,最高境界是什么呢? 我認為是:自解釋,即'代碼即注釋'。

為什么這么說呢,因為通常來說一個函數是會有函數注釋的,即使函數名字取的不好,如果注釋寫的比較清楚,對于后續維護人員來說也是了解函數具體功能的一種方式。

而變量則不同,在一個工程里面,變量的數量遠遠大于函數的數量,所以不太可能對于每個變量都去寫注釋,所以如果一個工程的變量命名很糟糕,那么對于后續維護人員來說將是毀滅性的打擊,因為每讀到一個變量,可能就需要去猜測變量的含義,我想沒有哪個人愿意讀到這樣的代碼,永遠記住一點:'代碼是寫給人看的,不是寫給機器看的'。

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

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

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

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

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

三.變量命名最佳實踐

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

變量一般情況下建議使用名詞、名字組合或者形容詞,因為變量一般形容的是一種事物或者事物的屬性,所以用名詞或者名詞組合更容易讓人理解,而形容詞一般用于bool類型的變量。

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

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

舉個例子,比如下面這行代碼:

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

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

那么怎么優化這段代碼命名呢?其實很簡單,稍微細化一下變量含義,讓變量名自己去表達實際意圖:

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

3)變量命名前后用詞需統一

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

保持前后命名風格統一是保證工程代碼良好可讀性的關鍵保證。

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

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

一般可采取兩種方式:

使用復數s結尾

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

用集合類型作為后綴

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

上面兩種方式均可,沒有比較明顯的偏好,根據實際場景決定。第一種方式相對更簡潔,第二種在局部作用域里面有多種相關的集合變量時區分度更大,比如:

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

我的建議是如果局部作用域只有一種類型的集合,那么推薦使用復數形式;如果局部作用域有多個相關的集合類型,那么推薦用類型結尾。

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

在java中,禁止用is作為bool類型的類成員變量的前綴,因為is作為前綴會導致序列化/反序列出現問題,阿里的java代碼規范中也明確提到了這一點,所以在寫代碼的時候最好還是遵守公認的規范,不然哪天說不定就踩坑了。

6)盡量避免使用縮寫進行命名

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

比如下面這個命名:

int averageStudentAge; => int avgStudentAge;

因為avg大家都知道是average的縮寫,所以這么寫問題不大,不會引起歧義;

但是下面這種縮寫命名:

restmpcnt

就不是好的縮寫命名,因為不同的人閱讀可能會有不同的理解:

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變量

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

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

看到這段代碼,讀者會有疑問flag變量的含義是什么?flag值為1的時候又代表什么含義?是醫生的值班/在崗狀態、還是醫生的身體狀態?估計讀者的內心是崩潰的。

如果優化成下面這種形式:

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 薄壁轴承-等截面薄壁轴承生产厂家-洛阳薄壁精密轴承有限公司 | 厌氧工作站-通用型厌氧工作站-上海胜秋科学仪器有限公司 | 济南电缆桥架|山东桥架-济南航丰实业有限公司 | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 环氧树脂地坪漆_济宁市新天地漆业有限公司 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | 整车VOC采样环境舱-甲醛VOC预处理舱-多舱法VOC检测环境仓-上海科绿特科技仪器有限公司 | 耐火砖厂家,异形耐火砖-山东瑞耐耐火材料厂 | 土壤墒情监测站_土壤墒情监测仪_土壤墒情监测系统_管式土壤墒情站-山东风途物联网 | 全温度恒温培养摇床-大容量-立式-远红外二氧化碳培养箱|南荣百科 | 河北中仪伟创试验仪器有限公司是专业生产沥青,土工,水泥,混凝土等试验仪器的厂家,咨询电话:13373070969 | 卓能JOINTLEAN端子连接器厂家-专业提供PCB接线端子|轨道式端子|重载连接器|欧式连接器等电气连接产品和服务 | 昆山新莱洁净应用材料股份有限公司-卫生级蝶阀,无菌取样阀,不锈钢隔膜阀,换向阀,离心泵 | 广州中央空调回收,二手中央空调回收,旧空调回收,制冷设备回收,冷气机组回收公司-广州益夫制冷设备回收公司 | 苏州教学设备-化工教学设备-环境工程教学模型|同科教仪 | 苏州防水公司_厂房屋面外墙防水_地下室卫生间防水堵漏-苏州伊诺尔防水工程有限公司 | 行业分析:提及郑州火车站附近真有 特殊按摩 ?2025实地踩坑指南 新手如何避坑不踩雷 | 杭州画室_十大画室_白墙画室_杭州美术培训_国美附中培训_附中考前培训_升学率高的画室_美术中考集训美术高考集训基地 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 制氮设备_PSA制氮机_激光切割制氮机_氮气机生产厂家-苏州西斯气体设备有限公司 | 营养师网,营养师考试时间,报名入口—网站首页 | 河南正规膏药生产厂家-膏药贴牌-膏药代加工-修康药业集团官网 | 精密模具-双色注塑模具加工-深圳铭洋宇通 | 泰安办公家具-泰安派格办公用品有限公司 | 冷却塔风机厂家_静音冷却塔风机_冷却塔电机维修更换维修-广东特菱节能空调设备有限公司 | 尚为传动-专业高精密蜗轮蜗杆,双导程蜗轮蜗杆,蜗轮蜗杆减速机,蜗杆减速机生产厂家 | 学校用栓剂模,玻璃瓶轧盖钳,小型安瓿熔封机,实验室安瓿熔封机-长沙中亚制药设备有限公司 | 列管冷凝器,刮板蒸发器,外盘管反应釜厂家-无锡曼旺化工设备有限公司 | PVC地板|PVC塑胶地板|PVC地板厂家|地板胶|防静电地板-无锡腾方装饰材料有限公司-咨询热线:4008-798-128 | 北京发电机出租_发电机租赁_北京发电机维修 - 河北腾伦发电机出租 | 【中联邦】增稠剂_增稠粉_水性增稠剂_涂料增稠剂_工业增稠剂生产厂家 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 冷却塔减速机器_冷却塔皮带箱维修厂家_凉水塔风机电机更换-广东康明冷却塔厂家 | 流程管理|流程管理软件|企业流程管理|微宏科技-AlphaFlow_流程管理系统软件服务商 | 食品机械专用传感器-落料放大器-低价接近开关-菲德自控技术(天津)有限公司 | 上海电子秤厂家,电子秤厂家价格,上海吊秤厂家,吊秤供应价格-上海佳宜电子科技有限公司 | 河南道路标志牌_交通路标牌_交通标志牌厂家-郑州路畅交通 | 量子管通环-自清洗过滤器-全自动反冲洗过滤器-北京罗伦过滤技术集团有限公司 | 大立教育官网-一级建造师培训-二级建造师培训-造价工程师-安全工程师-监理工程师考试培训 | 3A别墅漆/3A环保漆_广东美涂士建材股份有限公司【官网】 | 避光流动池-带盖荧光比色皿-生化流动比色皿-宜兴市晶科光学仪器 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 |