当前位置: 首页 > 科技观察

JavaScriptCleanCode-函数参数和副作用

时间:2023-03-14 01:24:58 科技观察

函数是JavaScript程序的重要组成部分,用于将代码划分为可重用的块。所以,为了拥有干净的JavaScript代码,我们需要有易于理解的功能。本文介绍了好函数的更多属性,包括标志参数、二元和三元函数以及副作用。应谨慎使用标志参数布尔参数。它使函数签名更加复杂,并告诉我们函数不只是做一件事(有多个路径)。二元函数二元函数比参数较少的函数更难理解。但有时使用二元函数是有意义的。例如,如果有一个持有笛卡尔坐标的对象,那么它应该有2个参数。例如,您可以创建一个带有构造函数的类,该构造函数采用2个参数,如下所示:classPoint{constructor(x,y){this.x=x;this.y=y;}}constpoint=newPoint(1,2);几乎不可能用任何其他方式来定义它。但是,我们必须意识到,二元函数比参数较少的函数需要更多的时间和精力。三元函数具有3个参数的函数需要花费大量时间和精力来理解具有2个参数的函数。如果有2个或更少的参数,则需要考虑更多的参数组合。将参数组合成对象如果一个函数有多个参数,您应该考虑将它们组合成一个对象。如果参数相关,则尤其如此。例如,下面的函数有很多参数:constdescribeFruit=(color,name,size,price,numSeeds,type)=>{return`${fruitName}is${fruitColor}.It's${fruitSize}.Itcosts${price}.ithas${numSeeds}.Thetypeif${type}`;}6个参数可能太多了,可以传入一个对象清理一下:constdescribeFruit=(fruit)=>{return`${fruit.name}is${fruit.color}.It's${fruit.size}.Itcosts${fruit.price}.Ithas${fruit.numSeeds}.Thetypeif${fruit.type}`;}如我们所见,它更整洁而且不会trequire不用担心大量参数的传递。因为函数更短,也更适合在屏幕上显示。5个参数可能是一个函数应该包含的最大值。来源:Pexels动词和关键字在函数名称中包含动词和关键字是个好主意,因为它们会做一些事情,这意味着名称中的动词是有意义的。此外,我们需要知道执行操作的对象。这意味着必须添加一些关键字才能执行此操作。例如,一个好的函数定义应该是这样的:constcopyArray=(array)=>[...array];copyArray名称让我们知道该函数复制了一个数组。它还让我们知道要传递给函数的内容,这显然是一个数组。无副作用副作用是函数内部的代码对函数外部的某些内容进行了更改。这很糟糕,因为它对函数之外的事物进行了隐藏更改。我们应该尽量避免这种情况,因为它会产生一些意外并且需要更多的时间来测试,因为除了接受参数、执行操作和返回结果之外,还必须考虑内容已经更改的函数之间。这意味着我们必须测试函数返回结果以外的东西。例如,如果有:letnumFruits=1;constaddFruit=()=>{numFruits++;}constremoveFruit=()=>{numFruits--;}那么我们有2个有副作用的函数,因为它们都改变了numFruits变量。编写这些函数的更好方法是将它们编写为纯函数。纯函数是在给定相同参数的情况下返回相同内容的函数。此外,它没有副作用。因此,纯函数更容易测试,它们的行为也是可预测的。将上面的代码改写如下:现在,有2个函数采用numFruits参数并分别返回更大或更小的数字。然后可以使用它们在函数外部更改numFruits变量。正如我们所见,它们对numFruits没有做任何事情,而是分别返回numberOfFruits参数加或减1。如果我们为它们编写测试,我们可以通过传入输入并检查输出是否是我们想要的来轻松地测试它们。这比给可能适用于被测代码的变量带来副作用要好得多。资料来源:Pexels标志参数应最小化。他们告诉我们函数不只是做一件事,而是函数签名中的另一个参数。采用较少参数的函数优于采用较多参数的函数。如果您需要许多参数,请考虑将它们合并到一个对象中。最后,如果条件允许,应尽可能避免副作用。具有副作用的函数执行隐藏操作并且难以测试。纯函数没有副作用,因此更易于测试和预测。