成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript整潔代碼-函數(shù)參數(shù)和副作用

開(kāi)發(fā) 前端
本文將介紹優(yōu)質(zhì)函數(shù)的更多屬性,包括標(biāo)志參數(shù),二元和三元函數(shù)以及副作用。

函數(shù)是JavaScript程序的重要組成部分,用于將代碼分成可重用的塊。因此,為了擁有整潔的JavaScript代碼,我們需要具有易于理解的函數(shù)。

本文將介紹優(yōu)質(zhì)函數(shù)的更多屬性,包括標(biāo)志參數(shù),二元和三元函數(shù)以及副作用。

[[320204]]

標(biāo)志參數(shù)

布爾參數(shù)應(yīng)謹(jǐn)慎使用。它使函數(shù)簽名更加復(fù)雜,并告訴我們函數(shù)不僅做一件事(具有多個(gè)路徑)。

二元函數(shù)

二元函數(shù)比采用較少參數(shù)的函數(shù)更難理解。但有些時(shí)候使用二元函數(shù)是有道理的。例如,如果有一個(gè)保存笛卡爾坐標(biāo)的對(duì)象,那么它應(yīng)該有2個(gè)參數(shù)。

例如,可以創(chuàng)建一個(gè)帶有構(gòu)造函數(shù)的類,該構(gòu)造函數(shù)有2個(gè)參數(shù),如下所示:

  1. class Point { 
  2.   constructor(x, y) { 
  3.     this.x = x; 
  4.     this.y = y; 
  5.   } 
  6. }const point = new Point(1, 2); 

用其他方式定義它幾乎是不可能的。

但是,我們必須要意識(shí)到,與使用較少參數(shù)的函數(shù)相比,二元函數(shù)需要更多的時(shí)間和精力。

三元函數(shù)

具有3個(gè)參數(shù)的函數(shù)要花費(fèi)大量時(shí)間和精力才能理解具有2個(gè)參數(shù)的函數(shù)。

如果存在2個(gè)或更少的參數(shù),則有更多的參數(shù)組合可供考慮。

將參數(shù)合并為對(duì)象

如果一個(gè)函數(shù)含有多個(gè)參數(shù),應(yīng)該考慮將它們合并為對(duì)象。

如果參數(shù)之間有關(guān)聯(lián),則更應(yīng)該這樣做。例如,以下函數(shù)含有許多參數(shù):

  1. const describeFruit = (color,name, size, price, numSeeds, type) => { 
  2.     return `${fruitName} is ${fruitColor}.It's ${fruitSize}. It costs ${price}. It has ${numSeeds}. The type if ${type}`; 

6個(gè)參數(shù)可能太多,可以通過(guò)傳入一個(gè)對(duì)象來(lái)清理它:

  1. const describeFruit = (fruit)=> { 
  2.   return `${fruit.name} is${fruit.color}. It's ${fruit.size}. It costs ${fruit.price}. It has${fruit.numSeeds}. The type if ${fruit.type}`; 

如我們所見(jiàn),它更加整潔,且無(wú)需擔(dān)心大量參數(shù)的傳遞。

由于函數(shù)較為短小,因此也更適合屏幕顯示。

5個(gè)參數(shù)可能是一個(gè)函數(shù)應(yīng)該包含的最大值。

[[320205]]

來(lái)源:Pexels

動(dòng)詞和關(guān)鍵詞

將動(dòng)詞和關(guān)鍵字包含在函數(shù)名稱中不失為一個(gè)好主意,因?yàn)樗鼈儠?huì)執(zhí)行某些操作,這意味著名稱中的動(dòng)詞是合理的。

另外,我們需要知道執(zhí)行操作的對(duì)象。這意味著必須添加一些關(guān)鍵字才能做到這一點(diǎn)。

例如,符合這一點(diǎn)的優(yōu)質(zhì)函數(shù)定義類似于:

  1. const copyArray = (array) =>[...array]; 

copyArray 名稱讓我們知道函數(shù)復(fù)制了一個(gè)數(shù)組。

它還讓我們知道要傳遞給函數(shù)的內(nèi)容,這顯然是一個(gè)數(shù)組。

無(wú)副作用

副作用是函數(shù)中的代碼會(huì)對(duì)函數(shù)外部的內(nèi)容進(jìn)行更改。

這是很糟糕的,因?yàn)樗鼤?huì)對(duì)函數(shù)之外的內(nèi)容進(jìn)行隱藏更改。

我們應(yīng)該盡可能避免這種情況,因?yàn)檫@會(huì)造成一些出乎意料的事情,并且要花更多的時(shí)間進(jìn)行測(cè)試,因?yàn)槌私邮軈?shù),執(zhí)行操作并返回結(jié)果外,它還對(duì)必須考慮的函數(shù)之外的內(nèi)容進(jìn)行了更改。

這意味著我們必須測(cè)試函數(shù)返回結(jié)果之外的內(nèi)容。

例如,如果有:

  1. let numFruits = 1 
  2. const addFruit = () => {  
  3.   numFruits++;  
  4. }const removeFruit = () => {  
  5.   numFruits--;  

那么我們有2個(gè)具有副作用的函數(shù),因?yàn)樗鼈兌几牧烁髯院瘮?shù)外部的 numFruits變量。

編寫(xiě)這些函數(shù)的更好方法是將它們編寫(xiě)為純函數(shù)。純函數(shù)是在傳入相同參數(shù)的情況下返回相同內(nèi)容的函數(shù)。而且,它沒(méi)有副作用。

因此,純函數(shù)更易于測(cè)試,并且它們的行為也是可以預(yù)測(cè)的。

重寫(xiě)上面的代碼,如下所示:

  1. let numFruits = 1
  2. const addFruit = (numberOfFruits) => numberOfFruits + 1; 
  3. const removeFruit = (numberOfFruits) => numberOfFruits - 1;numFruits = addFruit(numFruits); 
  4. numFruits = removeFruit(numFruits); 

現(xiàn)在,有2個(gè)函數(shù)來(lái)接收numFruits 參數(shù),并分別返回一個(gè)更大或更小的數(shù)字。

然后可以使用它們來(lái)更改函數(shù)外部的numFruits變量。

如我們所見(jiàn),它們對(duì) numFruits 不執(zhí)行任何操作,而是分別返回numberOfFruits參數(shù)加1或減1。

如果為它們編寫(xiě)測(cè)試,則可以通過(guò)傳入輸入和檢查輸出是否是我們想要的內(nèi)容來(lái)輕松測(cè)試它們。這比將副作用賦予可能適用于測(cè)試代碼的變量要好得多。

[[320206]]

來(lái)源:Pexels

標(biāo)志參數(shù)應(yīng)最小化。他們告訴我們,該函數(shù)不僅完成一件事情,而且是函數(shù)簽名中的另一個(gè)參數(shù)。

使用較少參數(shù)的函數(shù)要優(yōu)于使用較多參數(shù)的函數(shù)。如果需要很多參數(shù),請(qǐng)考慮將它們合并成一個(gè)對(duì)象。

最后,若條件允許,應(yīng)盡量避免副作用。具有副作用的函數(shù)會(huì)執(zhí)行隱藏操作,并且很難對(duì)它進(jìn)行測(cè)試。純函數(shù)不會(huì)產(chǎn)生副作用,因此更具可測(cè)試性和可預(yù)測(cè)性。

責(zé)任編輯:趙寧寧 來(lái)源: 今日頭條
相關(guān)推薦

2024-01-15 07:15:05

函數(shù)式編程代碼

2012-08-01 09:38:17

代碼整潔

2011-04-21 17:32:15

CC++

2025-06-27 06:38:19

2021-01-06 14:42:09

前端Typescript代碼

2012-08-01 09:23:31

代碼

2020-08-11 06:53:33

Vue前端代碼

2011-12-02 10:19:24

CSS

2021-03-07 09:19:31

React代碼整潔代碼的實(shí)踐

2010-09-02 10:35:51

DIV+CSS

2012-07-16 14:58:40

2011-06-03 15:06:30

CSS

2011-09-22 09:38:27

CIO云計(jì)算

2011-09-24 12:26:41

2011-06-03 15:21:51

CSS

2017-09-14 13:55:57

JavaScript

2010-09-01 10:42:11

DIV+CSS

2019-03-13 08:00:00

JavaScript作用域前端

2020-12-09 10:49:33

代碼開(kāi)發(fā)GitHub

2011-09-06 09:56:24

JavaScript
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: av中文字幕在线 | 午夜影院普通用户体验区 | 日韩二三区 | 成人免费在线视频 | 亚洲国产精品久久久久秋霞不卡 | 国产精品欧美一区二区三区 | 雨宫琴音一区二区在线 | 日韩在线视频免费观看 | 国产 91 视频 | 成人免费毛片在线观看 | 成人免费精品视频 | 欧美黄在线观看 | av一区二区三区四区 | 日日摸夜夜添夜夜添特色大片 | 精品国产欧美一区二区三区成人 | 国产精品大片 | 一级黄色片免费 | 欧美日本一区 | 999国产视频 | 成人免费观看网站 | 日韩免费视频一区二区 | 91亚洲国产成人久久精品网站 | 国产精品观看 | 成人一区二区在线 | 国产精品久久久久久久久久免费看 | 精品国产一区二区国模嫣然 | 成人av在线大片 | 91在线精品一区二区 | 国产在线播放av | 天堂影院av| 精品国产青草久久久久96 | 国产亚洲一区二区精品 | 亚洲精品久久区二区三区蜜桃臀 | a国产一区二区免费入口 | www.中文字幕.com| 成人在线免费观看 | 亚洲精品电影网在线观看 | 日韩精品视频一区二区三区 | 91精品国产高清一区二区三区 | 中文字幕在线一区二区三区 | 亚洲成人免费 |