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

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

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

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

 

概述

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

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

為什么要這樣寫?

為什么要在這兒寫?

為什么不換個(gè)寫法?

Robert C. Martin在《代碼整潔之道》一書中說(shuō)過(guò):

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

 

就算是的壞代碼也能運(yùn)行,但如果代碼不干凈,也能會(huì)讓你的開(kāi)發(fā)團(tuán)隊(duì)陷入困境。

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

 

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

強(qiáng)類型檢查,使用"===",不用"=="

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

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

 

所以從現(xiàn)在開(kāi)始就強(qiáng)類型檢查,"亡羊補(bǔ)牢,猶未晚也"!

const value = "520";

if (value === 520) {

console.log(value);

}

條件不會(huì)滿足。

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();

// ...

// 等等,這個(gè)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;

函數(shù)

使用長(zhǎng)而具有描述性的函數(shù)名。

由于函數(shù)一般來(lái)說(shuō)表示某種行為,函數(shù)名稱應(yīng)該是動(dòng)詞或短??語(yǔ),這樣可以顯示功能以及參數(shù)的意義。

壞代碼:

function notif(user) {

// 代碼邏輯

}

好代碼:

function notifyUser(emailAddress){

//代碼邏輯

}

避免使用大量參數(shù)。

理想情況下,函數(shù)應(yīng)該指定兩個(gè)或更少的參數(shù)。參數(shù)越少,函數(shù)單元測(cè)試就越容易。

壞代碼:

function getUsers(fields, fromDate, toDate) {

//代碼邏輯

}

好代碼:

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

// 碼邏輯

}

getUsers({

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

fromDate: '2019-05-22',

toDate: '2019-05-31'

});

使用默認(rèn)參數(shù),不用條件

壞代碼:

function createShape(type) {

const shapeType = type || "circle";

// ...

}

好代碼:

function createShape(type = "circle") {

// ...

}

一個(gè)函數(shù)做一件事。避免在單個(gè)函數(shù)中執(zhí)行多個(gè)操作,多種邏輯

壞代碼:

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配置默認(rèn)對(duì)象

壞代碼:

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代碼整潔之道——好代碼和壞代碼

 

不要使用標(biāo)志作為參數(shù)。

壞代碼:

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}`);

}

不要讓全局變量/函數(shù)污染

 

如果需要擴(kuò)展現(xiàn)有對(duì)象,請(qǐng)使用ES類和繼承,不要在對(duì)象原型鏈上創(chuàng)建函數(shù)。

壞代碼:

Array.prototype.myFunc = function myFunc() {

// 代碼邏輯

};

好代碼:

class SuperArray extends Array {

myFunc() {

//代碼邏輯

}

}

條件

不要用否定句

壞代碼

function isUserNotBlocked(user) {

//代碼邏輯

}

if (!isUserNotBlocked(user)) {

//代碼邏輯

}

好代碼:

function isUserBlocked(user) {

//代碼邏輯

}

if (isUserBlocked(user)) {

//代碼邏輯

}

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

壞代碼:

if (isValid === true) {

//代碼邏輯

}

if (isValid === false) {

//代碼邏輯

}

好代碼:

if (isValid) {

//代碼邏輯

}

if (!isValid) {

//代碼邏輯

}

避免使用條件,用多態(tài)和繼承。

壞代碼:

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中的新的語(yǔ)法糖。除了語(yǔ)法不同外,其他都和prototype一樣工作。使用ES類可以讓你的代碼更加簡(jiǎn)潔清晰。

壞代碼:

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

 

好代碼:

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

 

使用方法鏈接

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

壞代碼:

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

 

好代碼:

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

 

其他

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

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

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

結(jié)論

上面只是代碼整潔的部分原理,而且個(gè)別條款也可能需要商榷。這些大部分理論來(lái)源于《代碼整潔之道》這本書。有什么建議意見(jiàn)請(qǐng)回復(fù),一起學(xué)習(xí)討論。

分享到:
標(biāo)簽:代碼 JavaScript
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定