日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

JavaScript代碼整潔之道——好代碼和壞代碼

 

概述

我們之道作為一個碼農,不論其實現如何,功能怎樣,寫的一手清晰靠譜的代碼是其代碼功力的體現。好的、清潔的代碼可以方便自己以后維護,讓你的繼任者馬上能接手維護它,而不是給你檫屁股,被人戳脊梁骨、被罵垃圾代碼。所以,寫清潔地代碼非常重要。

那么什么才是清潔代碼的呢?不言而喻,清潔的代碼就是可以讓人易于人理解、易于更改、方便擴展的代碼。寫清潔的代碼要常捫心自問:

為什么要這樣寫?

為什么要在這兒寫?

為什么不換個寫法?

Robert C. Martin在《代碼整潔之道》一書中說過:

JavaScript代碼整潔之道——好代碼和壞代碼

 

就算是的壞代碼也能運行,但如果代碼不干凈,也能會讓你的開發團隊陷入困境。

JavaScript代碼整潔之道——好代碼和壞代碼

 

在本文中,蟲蟲就給大家講講JAVAScript代碼的整潔知道,全面對比下好的代碼和壞的代碼的寫法。

強類型檢查,使用"===",不用"=="

類型的檢查非常重要,使用強類型檢查可以幫我理清程序邏輯,如果類型檢查松懈了(使用==),有可能使你的邏輯"南轅北撤了",試看下面的例子:

JavaScript代碼整潔之道——好代碼和壞代碼

 

所以從現在開始就強類型檢查,"亡羊補牢,猶未晚也"!

const value = "520";

if (value === 520) {

console.log(value);

}

條件不會滿足。

if (value === "520") {

console.log(value);

}

條件滿足。

變量命名

變量的命名要有意義,而不是隨意亂起。最好是"望文生義",一看到變量名就知道是干嘛用的。

望文生義

壞代碼:

let daysSLV= 10;

let y = new Date().getFullYear();

let ok;

if (user.age > 30) {

ok = true;

}

好代碼:

const MAX_AGE = 30;

let daysSinceLastVisit = 10;

let currentYear = new Date().getFullYear();

...

const isUserOlderThanAllowed = user.age > MAX_AGE;

不要給變量添加額外不需要的單詞

壞代碼:

let nameValue;

let theProduct;

好代碼:

let name;

let product;

不要讓我們需要從上下文中了解變量的意思

壞代碼:

const ans = ["Chongchong", "maomaochong", "bollworm"];

ans.forEach(an => {

doSomething();

doSomethingElse();

// ...

// 等等,這個u是干嘛用的?

register(an);

});

JavaScript代碼整潔之道——好代碼和壞代碼

 

好代碼:

const animals = ["Chongchong", "maomaochong", "bollworm"];

animals.forEach(animal => {

doSomething();

doSomethingElse();

// ...

// ...

register(animal);

});

JavaScript代碼整潔之道——好代碼和壞代碼

 

不添加多余的上下文

壞代碼:

const user = {

userName: "Chongchong",

userNameAbb: "CC",

userAge: "28"

};

...

user.userName;

好代碼:

const user = {

Name: "Chongchong",

NameAbb: "CC",

userAge: "28"

};

...

user.userName;

函數

使用長而具有描述性的函數名。

由于函數一般來說表示某種行為,函數名稱應該是動詞或短??語,這樣可以顯示功能以及參數的意義。

壞代碼:

function notif(user) {

// 代碼邏輯

}

好代碼:

function notifyUser(emailAddress){

//代碼邏輯

}

避免使用大量參數。

理想情況下,函數應該指定兩個或更少的參數。參數越少,函數單元測試就越容易。

壞代碼:

function getUsers(fields, fromDate, toDate) {

//代碼邏輯

}

好代碼:

function getUsers({ fields, fromDate, toDate }) {

// 碼邏輯

}

getUsers({

fields: ['name', 'surname', 'email'],

fromDate: '2019-05-22',

toDate: '2019-05-31'

});

使用默認參數,不用條件

壞代碼:

function createShape(type) {

const shapeType = type || "circle";

// ...

}

好代碼:

function createShape(type = "circle") {

// ...

}

一個函數做一件事。避免在單個函數中執行多個操作,多種邏輯

壞代碼:

function notifyUsers(users) {

users.forEach(user => {

const userRecord = database.lookup(user);

if (userRecord.isVerified()) {

notify(user);

}

});

}

JavaScript代碼整潔之道——好代碼和壞代碼

 

好代碼:

function notifyVerifiedUsers(users) {

users.filter(isUserVerified).forEach(notify);

}

function isUserVerified(user) {

const userRecord = database.lookup(user);

return userRecord.isVerified();

}

JavaScript代碼整潔之道——好代碼和壞代碼

 

使用Object.assign配置默認對象

壞代碼:

const shapeConfig = {

type: "cube",

width: 200,

height: null

};

function createShape(config) {

config.type = config.type || "cube";

config.width = config.width || 250;

config.height = config.width || 250;

}

createShape(shapeConfig);

好代碼:

const shapeConfig = {

type: "cube",

width: 200

};

function createShape(config) {

config = Object.assign(

{

type: "cube",

width: 250,

height: 250

},

config

);

...

}

createShape(shapeConfig);

JavaScript代碼整潔之道——好代碼和壞代碼

 

不要使用標志作為參數。

壞代碼:

function createFile(name, isPublic) {

if (isPublic) {

fs.create(`./public/${name}`);

} else {

fs.create(name);

}

}

好代碼

function createFile(name) {

fs.create(name);

}

function createPublicFile(name) {

createFile(`./public/${name}`);

}

不要讓全局變量/函數污染

 

如果需要擴展現有對象,請使用ES類和繼承,不要在對象原型鏈上創建函數。

壞代碼:

Array.prototype.myFunc = function myFunc() {

// 代碼邏輯

};

好代碼:

class SuperArray extends Array {

myFunc() {

//代碼邏輯

}

}

條件

不要用否定句

壞代碼

function isUserNotBlocked(user) {

//代碼邏輯

}

if (!isUserNotBlocked(user)) {

//代碼邏輯

}

好代碼:

function isUserBlocked(user) {

//代碼邏輯

}

if (isUserBlocked(user)) {

//代碼邏輯

}

使用布爾變量直接判斷,而不是條件語句

壞代碼:

if (isValid === true) {

//代碼邏輯

}

if (isValid === false) {

//代碼邏輯

}

好代碼:

if (isValid) {

//代碼邏輯

}

if (!isValid) {

//代碼邏輯

}

避免使用條件,用多態和繼承。

壞代碼:

class Car {

// ...

getMaximumSpeed() {

switch (this.type) {

case "Ford":

return this.someFactor() + this.anotherFactor();

case "Benz":

return this.someFactor();

case "BYD":

return this.someFactor() - this.anotherFactor();

}

}

}

好代碼:

class Car {

// ...

}

class Ford extends Car {

// ...

getMaximumSpeed() {

return this.someFactor() + this.anotherFactor();

}

}

class Benz extends Car {

// ...

getMaximumSpeed() {

return this.someFactor();

}

}

class BYD extends Car {

// ...

getMaximumSpeed() {

return this.someFactor() - this.anotherFactor();

}

}

JavaScript代碼整潔之道——好代碼和壞代碼

 

ES類

類是JavaScript中的新的語法糖。除了語法不同外,其他都和prototype一樣工作。使用ES類可以讓你的代碼更加簡潔清晰。

壞代碼:

JavaScript代碼整潔之道——好代碼和壞代碼

 

好代碼:

JavaScript代碼整潔之道——好代碼和壞代碼

 

使用方法鏈接

許多庫如jQuery和Lodash都使用該模式。因此,該方法可以讓的代碼簡潔。在主類中,只需在每個函數的末尾返回"this",就可以將更多的類方法鏈接到該方法。

壞代碼:

JavaScript代碼整潔之道——好代碼和壞代碼

 

好代碼:

JavaScript代碼整潔之道——好代碼和壞代碼

 

其他

通常情況下,盡量不要寫不要重復代碼,不要寫不使用的函數和死代碼。

出于歷史原因,可能會遇到重復的代碼。例如,有兩段你略有不同的代碼,但是有很多共同的邏輯,為省事或者趕工期,導致你復制了大段代碼,略做小改然后使用了。針對這種代碼,后期一定要及早抽象出相同邏輯部分刪除重復代碼越早越好,不要欠死賬,不然后越積越多就不好處理了。

關于死代碼,碼如其名。就是啥事不干,刪了可能引入錯誤,這和上面的一樣處理,及早處理,不用了就早處理,早刪除。

結論

上面只是代碼整潔的部分原理,而且個別條款也可能需要商榷。這些大部分理論來源于《代碼整潔之道》這本書。有什么建議意見請回復,一起學習討論。

分享到:
標簽:代碼 JavaScript
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定