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

JavaScript整潔代碼-函數參數和副作用

開發 前端
本文將介紹優質函數的更多屬性,包括標志參數,二元和三元函數以及副作用。

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

本文將介紹優質函數的更多屬性,包括標志參數,二元和三元函數以及副作用。

[[320204]]

標志參數

布爾參數應謹慎使用。它使函數簽名更加復雜,并告訴我們函數不僅做一件事(具有多個路徑)。

二元函數

二元函數比采用較少參數的函數更難理解。但有些時候使用二元函數是有道理的。例如,如果有一個保存笛卡爾坐標的對象,那么它應該有2個參數。

例如,可以創建一個帶有構造函數的類,該構造函數有2個參數,如下所示:

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

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

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

三元函數

具有3個參數的函數要花費大量時間和精力才能理解具有2個參數的函數。

如果存在2個或更少的參數,則有更多的參數組合可供考慮。

將參數合并為對象

如果一個函數含有多個參數,應該考慮將它們合并為對象。

如果參數之間有關聯,則更應該這樣做。例如,以下函數含有許多參數:

  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個參數可能太多,可以通過傳入一個對象來清理它:

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

如我們所見,它更加整潔,且無需擔心大量參數的傳遞。

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

5個參數可能是一個函數應該包含的最大值。

[[320205]]

來源:Pexels

動詞和關鍵詞

將動詞和關鍵字包含在函數名稱中不失為一個好主意,因為它們會執行某些操作,這意味著名稱中的動詞是合理的。

另外,我們需要知道執行操作的對象。這意味著必須添加一些關鍵字才能做到這一點。

例如,符合這一點的優質函數定義類似于:

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

copyArray 名稱讓我們知道函數復制了一個數組。

它還讓我們知道要傳遞給函數的內容,這顯然是一個數組。

無副作用

副作用是函數中的代碼會對函數外部的內容進行更改。

這是很糟糕的,因為它會對函數之外的內容進行隱藏更改。

我們應該盡可能避免這種情況,因為這會造成一些出乎意料的事情,并且要花更多的時間進行測試,因為除了接受參數,執行操作并返回結果外,它還對必須考慮的函數之外的內容進行了更改。

這意味著我們必須測試函數返回結果之外的內容。

例如,如果有:

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

那么我們有2個具有副作用的函數,因為它們都更改了各自函數外部的 numFruits變量。

編寫這些函數的更好方法是將它們編寫為純函數。純函數是在傳入相同參數的情況下返回相同內容的函數。而且,它沒有副作用。

因此,純函數更易于測試,并且它們的行為也是可以預測的。

重寫上面的代碼,如下所示:

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

現在,有2個函數來接收numFruits 參數,并分別返回一個更大或更小的數字。

然后可以使用它們來更改函數外部的numFruits變量。

如我們所見,它們對 numFruits 不執行任何操作,而是分別返回numberOfFruits參數加1或減1。

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

[[320206]]

來源:Pexels

標志參數應最小化。他們告訴我們,該函數不僅完成一件事情,而且是函數簽名中的另一個參數。

使用較少參數的函數要優于使用較多參數的函數。如果需要很多參數,請考慮將它們合并成一個對象。

最后,若條件允許,應盡量避免副作用。具有副作用的函數會執行隱藏操作,并且很難對它進行測試。純函數不會產生副作用,因此更具可測試性和可預測性。

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2024-01-15 07:15:05

函數式編程代碼

2012-08-01 09:38:17

代碼整潔

2011-04-21 17:32:15

CC++

2025-06-27 06:38:19

2012-08-01 09:23:31

代碼

2021-01-06 14:42:09

前端Typescript代碼

2020-08-11 06:53:33

Vue前端代碼

2011-12-02 10:19:24

CSS

2021-03-07 09:19:31

React代碼整潔代碼的實踐

2012-07-16 14:58:40

2010-09-02 10:35:51

DIV+CSS

2011-09-22 09:38:27

CIO云計算

2011-09-24 12:26:41

2011-06-03 15:06:30

CSS

2011-06-03 15:21:51

CSS

2017-09-14 13:55:57

JavaScript

2010-09-01 10:42:11

DIV+CSS

2020-12-09 10:49:33

代碼開發GitHub

2011-09-06 09:56:24

JavaScript

2019-03-13 08:00:00

JavaScript作用域前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩高清一区二区三区 | 免费激情av| 欧美一级网站 | 国产精品一二三区 | 久久成人国产精品 | 人人看人人爽 | 国产精品久久久久久福利一牛影视 | 亚洲成人精品国产 | 成人三级视频 | 91天堂| 亚洲网站在线观看 | 91精品国产综合久久久动漫日韩 | 在线欧美视频 | 在线看亚洲| 天堂影院av | 午夜视频免费在线观看 | 日韩字幕一区 | 在线观看中文字幕 | 亚洲精品免费观看 | 久久夜视频 | 在线观看视频中文字幕 | 9191av| 中文字幕黄色大片 | 国产精品久久久久久久久久免费看 | 成人午夜精品 | 午夜一级大片 | 91视频88av| 爱高潮www亚洲精品 中文字幕免费视频 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 自拍中文字幕 | www.黄色在线观看 | 亚洲国产18 | 国产区高清 | 亚洲国产一区在线 | 91一区二区在线观看 | 91极品欧美视频 | 午夜网址 | 中文字幕第十一页 | 91欧美| 中文字幕免费在线 | 日韩视频在线一区二区 |