玩物得志Java笔试题_代码规范利器-CheckStyle
本期內(nèi)容分為五個(gè)部分,閱讀時(shí)長預(yù)估7分鐘:
使用背景
CheckStyle使用意義
CheckStyle安裝與使用
CheckStyle檢查配置示例
落地使用情況及效果
使用背景
玩物得志目前還處在一個(gè)狂奔業(yè)務(wù)的時(shí)期,開發(fā)一般都全力支撐業(yè)務(wù)的快速奔跑,沒有太多的時(shí)間專門優(yōu)化代碼或者說沒有一個(gè)編碼規(guī)范約束開發(fā)同學(xué)寫的代碼,導(dǎo)致早期很多業(yè)務(wù)代碼的可讀性及可維護(hù)性比較差。
隨著團(tuán)隊(duì)人員規(guī)模的增大,不斷有新人加入及每個(gè)人的編碼經(jīng)驗(yàn)、代碼習(xí)慣風(fēng)格不同,很難靠口頭講來規(guī)范團(tuán)隊(duì)的代碼規(guī)范。
能否有一個(gè)工具從一開始寫代碼就要求開發(fā)人員遵守編碼規(guī)范?
編寫整潔優(yōu)雅的代碼,減輕CodeReview工作量,減少后續(xù)不斷重構(gòu)糟糕冗余的代碼,自動(dòng)化代碼規(guī)范的檢查過程?
它就是CheckStyle!
什么是CheckStyle
簡(jiǎn)單的說就是幫助Java程序員編寫符合代碼規(guī)范的工具。
它支持高度可配置的各種檢查規(guī)則,進(jìn)行自動(dòng)化的檢查,不符合代碼規(guī)范的地方會(huì)有紅色波浪線提醒,鼠標(biāo)箭頭移上去會(huì)有相應(yīng)的提示,簡(jiǎn)單易用!
編碼常見的問題
CheckStyle支持100多項(xiàng)代碼檢查規(guī)則,下面整理了我們平時(shí)編寫代碼中常見的不規(guī)范問題如下:
Import語句(無用的導(dǎo)入,多余導(dǎo)入使用'.*')
嵌套層數(shù)太多,可讀性、可維護(hù)性太差(if嵌套層數(shù)過多,try catch嵌套層數(shù)過多)
魔術(shù)數(shù)字
命名不規(guī)范(Static變量名\常量名\參數(shù)名\方法名\包名\類名\接口名)
方法、類行數(shù)太多導(dǎo)致可讀、可維護(hù)性太差
方法參數(shù)個(gè)數(shù)過多
方法分支復(fù)雜度、圈復(fù)雜度過多
類或接口聲明部分順序沒按照J(rèn)ava語言編碼規(guī)則
空catch塊,if else語句沒有使用大括號(hào)等
編碼細(xì)節(jié)問題:如檢查是否在long類型定義了大寫的L,字母小寫l和數(shù)字1很相似
CheckStyle使用意義
遵從共同的編碼規(guī)范,編寫出易于閱讀和維護(hù)的代碼,減少Bug產(chǎn)生的可能性
自動(dòng)化代碼規(guī)范的檢查過程,提升代碼質(zhì)量,減輕CodeReview工作量,提升研發(fā)效能
形成團(tuán)隊(duì)整體良好的編碼習(xí)慣,減少后續(xù)因糟糕冗余代碼導(dǎo)致的不斷重構(gòu)的工作量,提升研發(fā)效能
CheckStyle安裝與使用
CheckStyle插件安裝
點(diǎn)擊Preferences,搜索框里搜索plugins,點(diǎn)擊Plugins,搜索CheckStyle找到CheckStyle-IDEA插件,安裝并啟用
IDEA CheckStyle插件生效
點(diǎn)擊Preferences,搜索框里搜索Inspections,點(diǎn)擊Inspections,搜索CheckStyle找到CheckStyle勾選上,建議右下角的Severity配置成Error級(jí)別
CheckStyle配置文件
通過下方途徑下載CheckStyle配置文件,CheckStyle的檢查有error、warn、info三種級(jí)別
公眾號(hào)內(nèi)回復(fù)【checkstyle】獲取配置文件
copy到應(yīng)用包的目錄下
添加CheckStyle配置文件
點(diǎn)擊Preferences,搜索框里搜索CheckStyle,按如下步驟添加配置文件
運(yùn)行查看執(zhí)行效果
支持當(dāng)前文件、整個(gè)工程及分支增量更改文件的checkStyle檢查,檢查效果如下:
Checkstyle引入到maven構(gòu)建中
為什么使用maven的checkstyle插件,主要可以約束打的包符合代碼規(guī)范。
如果代碼不規(guī)范連包都打不起來,因?yàn)椴寮渲玫搅薽aven的生命周期里(一開始可能不符合規(guī)范的代碼很多,如果來不及全部改完建議暫時(shí)先注釋掉引入的checkstyle插件來打包,后續(xù)修改完再去掉注釋)
主 Pom包中引入?maven-checkstyle-plugin
org.apache.maven.pluginsmaven-checkstyle-plugin3.0.0packagechecktruetrueUTF-8wwdz-checkstyle.xmlcom.puppycrawl.toolscheckstyle8.0
執(zhí)行命令:
mvn checkstyle:checkstyle
執(zhí)行檢查結(jié)果:
CheckStyle引入注意的問題
檢查工程中返回給前端或者客戶端使用的VO類中的變量,如果不符合駝峰命名規(guī)范,掃描出來不能直接更改,因?yàn)檫@些變量前端做展示使用,需要前端和客戶端兼容更改。建議先使用 //cs:off //cs:on 忽略校驗(yàn),后續(xù)杜絕此類問題的產(chǎn)生
提供Http請(qǐng)求的傳參命名不符合駝峰命名規(guī)范,掃描出來不能直接更改,需要客戶端或前端做兼容更改。建議先使用//cs:off //cs:on 忽略校驗(yàn)(如下圖所示),后續(xù)杜絕此類問題的產(chǎn)生
提供Http請(qǐng)求的傳參個(gè)數(shù)過多,不能直接更改,需要調(diào)用的客戶端或前端兼容更改。建議先使用//cs:off //cs:on 忽略校驗(yàn),后續(xù)杜絕此類問題的產(chǎn)生
一開始引入CheckStyle可能不符合規(guī)范的改動(dòng)點(diǎn)很多,可以針對(duì)增量修改、新增文件做CheckStyle,本地代碼在commit之前可以針對(duì)這次提交的增量代碼進(jìn)行CheckStyle檢查
(其實(shí)在編寫代碼的時(shí)候有不符合規(guī)范的也會(huì)實(shí)時(shí)紅色波浪線提醒,鼠標(biāo)移動(dòng)上去就有相應(yīng)的提示!)
?
CheckStyle檢查配置示例
CheckStyle的所有檢查項(xiàng)見官方文檔:https://checkstyle.sourceforge.io/checks.html,下面針對(duì)應(yīng)用中常見的CheckStyle檢查不通過的做下說明:
嵌套層數(shù)
try catch嵌套層數(shù)
默認(rèn)是一層,可根據(jù)實(shí)際配置(建議不超過兩層),嵌套層數(shù)越多可讀性越差,后續(xù)不便于代碼維護(hù)
if嵌套層數(shù)
默認(rèn)是一層,可根據(jù)實(shí)際配置(建議不超過兩層),if 嵌套層數(shù)越多可讀性就越差,后續(xù)不便于代碼維護(hù)
如下代碼中的多層嵌套,可通過if return 編碼方式減少if嵌套層數(shù)
Import語句
必須導(dǎo)入類的完整路徑,即不能使用*導(dǎo)入所需的類
檢查結(jié)果
檢查是否導(dǎo)入不必顯示導(dǎo)入的類
檢查是否導(dǎo)入的類沒有使用
檢查結(jié)果
復(fù)雜度
魔術(shù)數(shù)字
代碼中最常見的問題,改為使用常量定義替代
命名不規(guī)范
常量命名規(guī)范配置
在編寫代碼過程中如果不符合常量命名規(guī)范有如下提示:
方法名命名規(guī)范配置
參數(shù)命名規(guī)范配置
方法參數(shù)個(gè)數(shù)
局部變量名規(guī)范
局部變量不規(guī)范提示:
成員變量
不規(guī)范提示:
UpperEll
代碼行數(shù)限制
如下限制方法行數(shù)不能超過60行,類行數(shù)不能超過1200行,一個(gè)文件的行數(shù)不能超過1500行
行數(shù)過多提示如下:
方法參數(shù)限制
聲明順序檢查
根據(jù)Java編程語言的編碼規(guī)約,一個(gè)類或接口的聲明部分應(yīng)當(dāng)按照以下順序出現(xiàn):
類(靜態(tài))變量:首先應(yīng)當(dāng)是public類變量,然后是protected類變量,再次是package類變量(沒有訪問標(biāo)識(shí)符),最后是private類變量
實(shí)例變量:首先應(yīng)當(dāng)是public類變量,然后是protected類變量,再次是package類變量(沒有訪問標(biāo)識(shí)符),最后是private類變量
構(gòu)造器
方法
例如下圖中靜態(tài)屬性定義順序錯(cuò)誤的提示
空catch塊
異常catch,要做些error日志關(guān)鍵信息打印返回錯(cuò)誤對(duì)象或者拋異常,檢查不符合此規(guī)范的示例如下:
if else 花括號(hào)檢查
落地使用情況及效果
目前CheckStyle已在用戶、訂單、商家、社區(qū)、支付等多個(gè)組落地使用。作者所在用戶組經(jīng)過一周CheckStyle檢查不通過的歷史代碼修改優(yōu)化,及新提交的CodeReview代碼前必須經(jīng)過CheckStyle檢查,組內(nèi)代碼整潔度及可讀性有了很明顯的提升,CodeReview的工作量也比之前減輕了很多。
有了CheckStyle這個(gè)代碼規(guī)范利器,組內(nèi)研發(fā)效能和代碼質(zhì)量又有了進(jìn)一步的提升!
點(diǎn)擊
“閱讀原文”查看更多精彩
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的玩物得志Java笔试题_代码规范利器-CheckStyle的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谦谦君子温润如玉什么意思 谦谦君子温润如
- 下一篇: 微信云盘怎么弄 方法步骤就在这