成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript 風(fēng)格指南(筆記)

wind5o / 1585人閱讀

摘要:用且只用一個(gè)完成這一需求。執(zhí)行時(shí)可以增加規(guī)則對(duì)要變量的合法性進(jìn)行判斷。繼承該類時(shí)可以重載默認(rèn)行為。讓對(duì)象擁有私有成員。理想情況下,應(yīng)將調(diào)用其他函數(shù)的函數(shù)寫在被調(diào)用函數(shù)的上方。避免位置標(biāo)記避免在源文件中寫入法律評(píng)論參考

變量

使用有意義、可讀性好的變量

使用 ES6 的 const 聲明常量

對(duì)功能類似的變量名采用統(tǒng)一的命名風(fēng)格

使用易于檢索名稱

舉例
// 反例
for (var i = 0; i < 525600; i++) {
  runCronJob();
}

// 正例
var MINUTES_IN_A_YEAR = 525600;
for (var i = 0; i < MINUTES_IN_A_YEAR; i++) {
  runCronJob();
}

使用說(shuō)明變量(即有意義的變量名)

顯式優(yōu)于隱式(變量名盡量簡(jiǎn)潔明了)

避免重復(fù)的描述

避免無(wú)意義的條件判斷

舉例
var currentPage="";
var pageNumInfo = JSON.parse(localStorage.getItem("pageNumInfo"));
if (pageNumInfo) {
    currentPage = parseInt(pageNumInfo[0].pageNum);
} else {
    currentPage = 1;
}
// 以上代碼片段可用以下代碼取代
var pageNumInfo = JSON.parse(localStorage.getItem("pageNumInfo")); 
var currentPage = parseInt(pageNumInfo[0].pageNum) || 1;

函數(shù)

函數(shù)參數(shù)

函數(shù)參數(shù)理想情況下應(yīng)該不超過(guò) 2 個(gè)。當(dāng)確實(shí)需要多個(gè)參數(shù)時(shí),大多情況下可以考慮將這些參數(shù)封裝成一個(gè)對(duì)象。

保證函數(shù)功能的單一性

功能不單一的函數(shù)將導(dǎo)致難以重構(gòu)、測(cè)試和理解。功能單一的函數(shù)易于重構(gòu),并使代碼更加干凈。

提高函數(shù)名的可讀性(函數(shù)名應(yīng)明確表明其功能)

函數(shù)應(yīng)該只做一層抽象

當(dāng)函數(shù)需要的抽象多于一層時(shí)通常意味著函數(shù)功能過(guò)于復(fù)雜,需將其進(jìn)行分解以提高其可重用性和可測(cè)試性。

避免在一個(gè)函數(shù)中寫重復(fù)的代碼

采用默認(rèn)參數(shù)精簡(jiǎn)代碼

使用 Object.assign() 設(shè)置默認(rèn)對(duì)象

不要使用標(biāo)記(Flag)作為函數(shù)參數(shù)(會(huì)破壞函數(shù)功能的單一性)

避免副作用

函數(shù)副作用:當(dāng)函數(shù)產(chǎn)生了除了“接受一個(gè)值并返回一個(gè)結(jié)果”之外的行為時(shí),稱該函數(shù)產(chǎn)生了副作用。比如寫文件、修改全局變量等。
程序在某些情況下確實(shí)需要副作用這一行為,如先前例子中的寫文件。這時(shí)應(yīng)該將這些功能集中在一起,不要用多個(gè)函數(shù)/類修改某個(gè)文件。用且只用一個(gè) service 完成這一需求。

不要寫全局函數(shù)

采用函數(shù)式編程

封裝判斷條件

避免“否定條件”的判斷

避免條件判斷

許多情況下通過(guò)使用多態(tài)(polymorphism)可以達(dá)到同樣的目的。
// 反例
class Airplane {
  //...
  getCruisingAltitude() {
    switch (this.type) {
      case "777":
        return getMaxAltitude() - getPassengerCount();
      case "Air Force One":
        return getMaxAltitude();
      case "Cessna":
        return getMaxAltitude() - getFuelExpenditure();
    }
  }
}

// 正例
class Airplane {
  //...
}

class Boeing777 extends Airplane {
  //...
  getCruisingAltitude() {
    return getMaxAltitude() - getPassengerCount();
  }
}

class AirForceOne extends Airplane {
  //...
  getCruisingAltitude() {
    return getMaxAltitude();
  }
}

class Cessna extends Airplane {
  //...
  getCruisingAltitude() {
    return getMaxAltitude() - getFuelExpenditure();
  }
}

避免類型判斷

避免過(guò)度優(yōu)化

無(wú)效代碼及時(shí)刪除

對(duì)象和數(shù)據(jù)結(jié)構(gòu)

使用 getters 和 setters

使用 getters 和 setters 獲取對(duì)象的數(shù)據(jù)遠(yuǎn)比直接使用點(diǎn)操作符具有優(yōu)勢(shì),為什么呢??
1、當(dāng)需要對(duì)獲取的對(duì)象屬性執(zhí)行額外操作時(shí)。
2、執(zhí)行 set 時(shí)可以增加規(guī)則對(duì)要變量的合法性進(jìn)行判斷。
3、封裝了內(nèi)部邏輯。
4、在存取時(shí)可以方便的增加日志和錯(cuò)誤處理。
5、繼承該類時(shí)可以重載默認(rèn)行為。
6、從服務(wù)器獲取數(shù)據(jù)時(shí)可以進(jìn)行懶加載。

讓對(duì)象擁有私有成員。(可以通過(guò)閉包實(shí)現(xiàn))

列表項(xiàng)目

單一職責(zé)原則(SRP)

開閉原則(OCP)

代碼實(shí)體(類,模塊,函數(shù)等)應(yīng)該易于擴(kuò)展,難于修改。
即代碼模塊的功能應(yīng)該要方便用戶拓展而不是修改源碼

利斯科夫替代原則(LSP)

子類對(duì)象應(yīng)該能夠替換其超類(父類)對(duì)象被使用。

接口隔離原則(ISP)

客戶端不應(yīng)該依賴它不需要的接口,一個(gè)類對(duì)另一個(gè)類的依賴應(yīng)該建立在最小的接口上。

依賴反轉(zhuǎn)原則(DIP)

該原則有兩個(gè)核心點(diǎn):
1、高層模塊不應(yīng)該依賴于低層模塊。他們都應(yīng)該依賴于抽象接口。
2、抽象接口應(yīng)該脫離具體實(shí)現(xiàn),具體實(shí)現(xiàn)應(yīng)該依賴于抽象接口。

使用 ES6 的 classes 而不是 ES5 的 Function

典型的 ES5 的類(function)在繼承、構(gòu)造和方法定義方面可讀性較差。
當(dāng)需要繼承時(shí),優(yōu)先選用 classes。
但是,當(dāng)在需要更大更復(fù)雜的對(duì)象時(shí),最好優(yōu)先選擇更小的 function 而非 classes。

使用方法鏈

優(yōu)先使用組合模式而非繼承

測(cè)試

單元測(cè)試,單一的測(cè)試每個(gè)概念

并發(fā)

用 Promise 替代回調(diào)(支持 ES6 的情況,優(yōu)先使用)

async 和 await(支持 ES7 的情況,優(yōu)先使用)

錯(cuò)誤處理

try/catch 捕獲異常

不要忽略被拒絕的 promises

格式化

大小寫一致

調(diào)用函數(shù)的函數(shù)和被調(diào)函數(shù)應(yīng)放在較近的位置

當(dāng)函數(shù)間存在相互調(diào)用的情況時(shí),應(yīng)將兩者置于較近的位置。理想情況下,應(yīng)將調(diào)用其他函數(shù)的函數(shù)寫在被調(diào)用函數(shù)的上方。

注釋

只對(duì)存在一定業(yè)務(wù)邏輯復(fù)雜性的代碼進(jìn)行注釋。注釋并不是必須的,好的代碼是能夠讓人一目了然,不用過(guò)多無(wú)謂的注釋。

被注釋掉的代碼及時(shí)刪除

不需要版本更新類型注釋。需要時(shí)可以使用 git log 獲取歷史版本。

避免位置標(biāo)記

避免在源文件中寫入法律評(píng)論

參考

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/99426.html

相關(guān)文章

  • <<編寫可維護(hù)的javascript>> 筆記3(語(yǔ)句和表達(dá)式)

    摘要:所有的塊語(yǔ)句都應(yīng)當(dāng)使用花括號(hào)包括花括號(hào)的對(duì)齊方式第一種風(fēng)格第二種風(fēng)格塊語(yǔ)句間隔第一種在語(yǔ)句名圓括號(hào)和左花括號(hào)之間沒有空格間隔第二種在左圓括號(hào)之前和右圓括號(hào)之后各添加一個(gè)空格第三種在左圓括號(hào)后和右圓括號(hào)前各添加一個(gè)空格我個(gè)人喜歡在右括號(hào)之后添 所有的塊語(yǔ)句都應(yīng)當(dāng)使用花括號(hào), 包括: if for while do...while... try...catch...finally 3....

    OBKoro1 評(píng)論0 收藏0
  • JavaScript 權(quán)威指南》讀書筆記 1 - 簡(jiǎn)介

    摘要:原文第一章主要介紹的大概情況基本語(yǔ)法。通過(guò)和來(lái)引用對(duì)象屬性或數(shù)組元素的值就構(gòu)成一個(gè)表達(dá)式。 原文:https://keelii.github.io/2016/06/16/javascript-definitive-guide-note-0/ 第一章 主要介紹 JavaScript 的大概情況、基本語(yǔ)法。之前沒有 JavaScript 基礎(chǔ)的看不懂也沒關(guān)系,后續(xù)章節(jié)會(huì)有進(jìn)一步的詳細(xì)說(shuō)明...

    sydMobile 評(píng)論0 收藏0
  • AI開發(fā)書籍分享

    摘要:編程書籍的整理和收集最近一直在學(xué)習(xí)深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的東西,發(fā)現(xiàn)深入地去學(xué)習(xí)就需要不斷的去提高自己算法和高數(shù)的能力然后也找了很多的書和文章,隨著不斷的學(xué)習(xí),也整理了下自己的學(xué)習(xí)筆記準(zhǔn)備分享出來(lái)給大家后續(xù)的文章和總結(jié)會(huì)繼續(xù)分享,先分享一部分的 編程書籍的整理和收集 最近一直在學(xué)習(xí)deep learning深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的東西,發(fā)現(xiàn)深入地去學(xué)習(xí)就需要不斷的去提高自己算法和高數(shù)的能力然后...

    huayeluoliuhen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<