編碼規(guī)范

高質(zhì)量代碼的三大要素:

可讀性驼仪、可維護(hù)性和可變更性

???做好代碼規(guī)范、提高代碼質(zhì)量珊楼,能顯著增強(qiáng)代碼的可讀性通殃、可維護(hù)性和可變更性。本文將這三大要素合稱為代碼的讀寫可維護(hù)性厕宗,努力提高代碼的讀寫可維護(hù)性画舌,是做好代碼規(guī)范的必要非充分條件。代碼規(guī)范和架構(gòu)設(shè)計(jì)是軟件的靈魂所在已慢,代碼質(zhì)量偏低曲聂,就像是人失去了三魂七魄中的一魄,就會(huì)喪失活力佑惠,影響正常運(yùn)行朋腋,增加軟件交付后維護(hù)成本,出現(xiàn)推遲完成膜楷、超出預(yù)算旭咽、特性缺失等現(xiàn)象。

??? 任何語(yǔ)言都需要強(qiáng)調(diào)編碼風(fēng)格的一致性赌厅。只要是團(tuán)隊(duì)開發(fā)穷绵,每個(gè)人都以相同的方式編寫代碼就是至關(guān)重要的。這樣大家才能方便地互相看懂和維護(hù)對(duì)方的代碼特愿。

代碼規(guī)范

???如果不想為以后挖坑仲墨,做好代碼規(guī)范是程序員和團(tuán)隊(duì)負(fù)責(zé)人、項(xiàng)目經(jīng)理的必修課揍障。如何保證當(dāng)前項(xiàng)目開發(fā)過(guò)程中壓力正常目养,而不是在后期面對(duì)過(guò)多的壓力、以至于噩夢(mèng)纏身毒嫡?最簡(jiǎn)單的辦法就是照看好你的代碼混稽,也就是落實(shí)好公司的代碼規(guī)范工作。每天為此付出一丁點(diǎn)的努力审胚,便可以避免代碼「腐爛」,并保證代碼產(chǎn)品日后不至于變得難以理解(可讀性)和維護(hù)(可維護(hù)性)礼旅。

代碼的可讀性

代碼的可讀性是指代碼讓人容易閱讀膳叨、跟蹤和理解的程度。提高代碼的可讀性可以為代碼閱讀者節(jié)約時(shí)間(避免閱讀時(shí)浪費(fèi)過(guò)多無(wú)謂的時(shí)間)和精力(Debug痘系、擴(kuò)展功能或是性能優(yōu)化的前提條件是你要讀懂這段代碼)菲嘴。以下是摘選的可供參考的策略:

  • 編碼風(fēng)格一致
  • 代碼清晰表達(dá)意圖
    • 寫人看得懂的單詞,如果選用英語(yǔ),那么避免日語(yǔ)龄坪、法語(yǔ)和漢語(yǔ)拼音等昭雌,盡量使用語(yǔ)義化的命名組合;
    • PIE 原則:意圖清楚而且表達(dá)明確地編程健田;
    • 能夠讓人快速看懂(最低限度的要求是自己一個(gè)月后能快速讀懂)烛卧;
  • 恰到好處的注釋
    • 不能太多或太少,注釋的形式根
      據(jù)代碼具體的情況有不同妓局;
    • 避免用注釋包裹代碼总放;
    • 盡量留下簡(jiǎn)明扼要的注釋;
  • 評(píng)估取舍
  • 避免寫一些現(xiàn)在不需要好爬、將來(lái)也不太可能需要的功能:
    • 不完美主義:不多寫代碼(如會(huì)話存儲(chǔ)拆分)局雄;
  • 避免做沒(méi)有太大價(jià)值的優(yōu)化工作;
  • 區(qū)分任務(wù)的輕重緩急:
    • 頭疼醫(yī)頭也醫(yī)腳:先容忍失敗存炮,再解決問(wèn)題(如節(jié)點(diǎn)關(guān)閉邏輯)炬搭;
    • 不頭疼不醫(yī)頭:量化分析(如參數(shù)調(diào)整回滾等);
  • 綜合考慮一下性能穆桂、便利性宫盔、生產(chǎn)力、成本和上市時(shí)間……
  • 簡(jiǎn)單就是美充尉,避免簡(jiǎn)單的功能寫出復(fù)雜的代碼飘言;
  • 保持簡(jiǎn)單的代碼遠(yuǎn)比寫出復(fù)雜代碼要難得多,但這是值得的驼侠;
  • 不編寫討巧的代碼姿鸿;
  • 避免無(wú)謂的條件嵌套和過(guò)度封裝;
  • 第一眼看上去就能知道其用處的代碼倒源,才是簡(jiǎn)單而美的代碼;
  • 堅(jiān)持操作方法的原子性苛预,而后使用組合模式實(shí)現(xiàn)業(yè)務(wù)邏輯;
  • 避免大段代碼笋熬,要寫高內(nèi)聚热某、低耦合的代碼;

** 代碼的可維護(hù)性**
??軟件可維護(hù)性是指理解胳螟、改正昔馋、改動(dòng)、改進(jìn)軟件的難易程度糖耸。通常影響軟件可維護(hù)性的因素有可理解性秘遏、可測(cè)試性和可修改性。筆者這里將其分為兩大類:編寫時(shí)可維護(hù)性和運(yùn)行時(shí)可維護(hù)性嘉竟。

編寫時(shí)可維護(hù)性
??編寫時(shí)可維護(hù)性是指在程序或系統(tǒng)上線后爆出 BUG邦危,開發(fā)團(tuán)隊(duì)能夠及時(shí)撲滅這個(gè) BUG 且不會(huì)爆出其他 BUG洋侨。保持方法的原子性,提高代碼內(nèi)聚倦蚪,能使某處修改的影響降到最低希坚,這樣某處方法出現(xiàn) BUG,也不太會(huì)影響到其他模塊的正常運(yùn)作陵且。編寫時(shí)可維護(hù)性還包括了代碼的「可測(cè)試性」裁僧。

??JavaScript Module AMD 標(biāo)準(zhǔn)執(zhí)行者(如 require.js)和 CMD 標(biāo)準(zhǔn)執(zhí)行者(如 sea.js)要求謹(jǐn)慎使用全局變量,將變量限制于一個(gè)個(gè)模塊之中滩报,使得 JavaScript 代碼變得更有條理且更便于維護(hù)锅知。

運(yùn)行時(shí)可維護(hù)性
??運(yùn)行時(shí)的可維護(hù)性是指在系統(tǒng)運(yùn)行過(guò)程中(或無(wú)需再次編碼發(fā)布、只需系統(tǒng)重啟一次)修改系統(tǒng)的某項(xiàng)配置并使其生效脓钾,且不影響現(xiàn)在正在進(jìn)行的業(yè)務(wù)和用戶的操作售睹。這要求軟件工程師不能把代碼寫死。例如配置文件可训、數(shù)據(jù)庫(kù)連接字符串昌妹、資源文件、日志等握截。

代碼的可寫性
代碼的可寫性包括「代碼的可變更性」飞崖,代碼的可變更性是軟件理論的核心,OOSE 花了極大篇幅都在講軟件的變更谨胞;敏捷開發(fā)則天然地要求軟件產(chǎn)品具有高逼格的可變更性固歪。
代碼的可寫性是建立在代碼的可維護(hù)性上的,而代碼的可寫性與可維護(hù)性又都建立在代碼的可讀性上胯努。如果代碼難以閱讀牢裳,那么 BUG 的修正將變得難以入手,新功能的添加就更是無(wú)從入手了叶沛。
不過(guò)前人已經(jīng)為我們指明了許多方向蒲讯,例如設(shè)計(jì)模式、RDD灰署、TDD判帮、DDD 等。使用設(shè)計(jì)模式可以顯著提高代碼的可寫性溉箕,盡管設(shè)計(jì)模式看上去難以理解且高深莫測(cè)晦墙,但通過(guò)多閱讀優(yōu)秀代碼、優(yōu)秀框架肴茄,多通過(guò)社區(qū)晌畅、群、博客独郎、郵件組和小面積聚會(huì)與在此道經(jīng)驗(yàn)富于己者交流踩麦,能讓自己的水平快速上升。最關(guān)鍵的是多實(shí)踐氓癌,實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)谓谦,也是掌握技術(shù)的唯一法門
「(程序員)富有探尋事物本質(zhì)之精神」便是此理。程序員幾乎無(wú)一例外地會(huì)將自己看到的能使自己進(jìn)步的知識(shí)與技巧立即(或不久之后)進(jìn)行嘗試(實(shí)踐)贪婉。

代碼重構(gòu)
代碼重構(gòu)是代碼可寫性的一種特殊情況反粥,把不穩(wěn)定的積木塞塞緊。軟件開發(fā)的整個(gè)過(guò)程也是一個(gè)不斷迭代疲迂、不斷優(yōu)化才顿、不斷重構(gòu)的過(guò)程。代碼重構(gòu)旨在不改變現(xiàn)有功能的基礎(chǔ)上尤蒿,通過(guò)調(diào)整程序代碼改善軟件的質(zhì)量郑气、性能,使其程序的設(shè)計(jì)模式和架構(gòu)更趨合理腰池,提高軟件的擴(kuò)展性(可寫性)和維護(hù)性(可維護(hù)性)尾组。
重構(gòu)的目的是最大限度避免軟件走向生命周期的終結(jié)(維護(hù)開發(fā)成本高于開發(fā)一個(gè)全新產(chǎn)品的成本時(shí),老的軟件便步入了生命周期的晚期)示弓。通過(guò)不斷重構(gòu)讳侨,糾正和改進(jìn)軟件設(shè)計(jì),使代碼更易為人所理解奏属,有助于尋找到隱藏的代碼缺陷跨跨,使系統(tǒng)對(duì)新需求的變更保持較強(qiáng)的適應(yīng)能力(可寫性)。
關(guān)于重構(gòu)的知識(shí)就此打住囱皿,強(qiáng)烈建議感興趣的讀者購(gòu)買《重構(gòu):改善既有代碼的設(shè)計(jì)》和《大話重構(gòu)》這兩本書勇婴。

代碼檢查
代碼檢查應(yīng)采取自動(dòng)化檢測(cè)與人工代碼審查相結(jié)合的方式進(jìn)行,后者傾向于更為重要的設(shè)計(jì)錯(cuò)誤上(如 BUG铆帽、競(jìng)態(tài)條件和潛在死鎖等)咆耿。
代碼檢查的目的是理解代碼,改進(jìn)代碼爹橱,確保代碼能正常工作萨螺,而不是批評(píng)任何人。
關(guān)于代碼檢查清單愧驱,可以閱讀這篇文章慰技;關(guān)于代碼審查的專業(yè)知識(shí)與技能不是本文關(guān)注的重點(diǎn),可以先閱讀這篇文章组砚,然后購(gòu)買相關(guān)的專業(yè)書籍進(jìn)行學(xué)習(xí)吻商。

編碼規(guī)范推薦
以下是一張可供參考的編碼規(guī)范示例。

垂直居中有幾種實(shí)現(xiàn)方式

方法1:table-cell

html結(jié)構(gòu):

1 <div class="box box1">
2 <span>垂直居中</span>
3 </div>

css:
1 .box1{
2 display: table-cell;
3 vertical-align: middle;
4 text-align: center;
5 }
方法2:display:flex

 1 .box2{
 2  display: flex;
 3  justify-content:center;
 4    align-items:Center;
 5 }

方法3:絕對(duì)定位和負(fù)邊距

.box3{position:relative;}
.box3 span{
        position: absolute;
        width:100px;
        height: 50px;
        top:50%;
        left:50%;
        margin-left:-50px;
        margin-top:-25px;
        text-align: center;
    }

方法4:絕對(duì)定位和0

 1 .box4 span{
 2  width: 50%; 
 3  height: 50%; 
 4  background: #000;
 5 overflow: auto; 
 6 margin: auto; 
 7  position: absolute; 
 8   top: 0; left: 0; bottom: 0; right: 0; 
 9 }

這種方法跟上面的有些類似糟红,但是這里是通過(guò)margin:auto和top,left,right,bottom都設(shè)置為0實(shí)現(xiàn)居中艾帐,很神奇吧乌叶。不過(guò)這里得確定內(nèi)部元素的高度,可以用百分比柒爸,比較適合移動(dòng)端准浴。

方法5:translate

 1 .box6 span{
 2   position: absolute;
 3  top:50%;
 4   left:50%;
 5  width:100%;
 6  transform:translate(-50%,-50%);
 7     text-align: center;
 8    }

這實(shí)際上是方法3的變形,移位是通過(guò)translate來(lái)實(shí)現(xiàn)的捎稚。

方法6:display:inline-block

  1 .box7{
  2  text-align:center;
  3  font-size:0;
  4 }
  5 .box7 span{
  6  vertical-align:middle;
  7   display:inline-block;
  8  font-size:16px;
  9 }
  10 .box7:after{
  11  content:'';
  12  width:0;
  13   height:100%;
  14   display:inline-block;
  15   vertical-align:middle;
  16 }

這種方法確實(shí)巧妙...通過(guò):after來(lái)占位乐横。

方法7:display:flex和margin:auto

1 .box8{
2 display: flex;
3   text-align: center;
4 }
5 .box8 span{margin: auto;}

方法8:display:-webkit-box

.box9{
display: -webkit-box;
-webkit-box-pack:center;
-webkit-box-align:center;
-webkit-box-orient: vertical;
text-align: center

}
方法9:display:-webkit-box

這種方法,在 content 元素外插入一個(gè) div今野。設(shè)置此 div height:50%; margin-bottom:-contentheight;葡公。

content 清除浮動(dòng),并顯示在中間条霜。

<div class="floater"></div>  
  <div class="content"> Content here </div>  

.floater {
float:left; 
height:50%; 
margin-bottom:-120px;
}
.content {
clear:both; 
height:240px; 
position:relative;
}

效果范例

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末催什,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蛔外,更是在濱河造成了極大的恐慌蛆楞,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夹厌,死亡現(xiàn)場(chǎng)離奇詭異豹爹,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)矛纹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門臂聋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人或南,你說(shuō)我怎么就攤上這事孩等。” “怎么了采够?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵肄方,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蹬癌,道長(zhǎng)权她,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任逝薪,我火速辦了婚禮隅要,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘董济。我一直安慰自己步清,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著廓啊,像睡著了一般欢搜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谴轮,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天狂巢,我揣著相機(jī)與錄音,去河邊找鬼书聚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛藻雌,可吹牛的內(nèi)容都是我干的雌续。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼胯杭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼驯杜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起做个,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鸽心,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后居暖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體顽频,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年太闺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了糯景。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡省骂,死狀恐怖蟀淮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钞澳,我是刑警寧澤怠惶,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站轧粟,受9級(jí)特大地震影響策治,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逃延,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一览妖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧揽祥,春花似錦讽膏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)俐末。三九已至,卻和暖如春奄侠,著一層夾襖步出監(jiān)牢的瞬間卓箫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工垄潮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烹卒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓弯洗,卻偏偏與公主長(zhǎng)得像旅急,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子牡整,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容