在函数中使Params成为必需

时间:2016-04-12 17:24:57

标签: javascript performance function error-handling parameter-passing

如果调用函数并且缺少调用函数正确执行所必需的参数,那么抛出错误是一个好习惯吗?

例如(在JavaScript中):

var sayHi = function(name) {
  console.log(name + ' says hi!');
}

VS

var sayHi = function(name) {
  if(!name) { throw new Error('param is missing'); }
  console.log(name + ' says hi!');
}  

是否有强烈的意见,第二个例子是一个很好的编码实践,或者它是否只会增加不必要的膨胀,这可能导致频繁发生不必要的错误,这些错误会被包含在数十甚至数百个文件中的更复杂的程序中?

3 个答案:

答案 0 :(得分:2)

你可以通过es6传递一个立即抛出Error作为默认值

的函数来实现
const err = msg => { throw Error( msg ) }

const sayHi = function(name = err('Name is undefined')) {
  console.log(name + ' says hi!');
}

这比在函数体内使用if语句稍微好一些,并提高了可读性。另一个人认为你可以做的是建立一个同样的装饰器。类似的东西:

@required( 'name')
const sayHi = function(name = err('Name is undefined')) {
  console.log(name + ' says hi!');
}

正如你在问题Is there a strong opinion中提到的那样,答案只能是主要的,所以在我看来,你应该总是有一个错误处理策略。无论是功能杠杆还是应用程序级别。我不太可能认为错误处理将是您的性能瓶颈。

答案 1 :(得分:1)

第一件事:

由您决定应该或不应该throw例外而不是return错误代码(或null或其他),这取决于您。

据我所知,只要您正确处理,就不会抛出异常而不是返回错误。

这导致了以下问题:

  

正确何时抛出异常(或JS中的错误)?

这个问题非常棘手,这里应该标记并关闭为“主要基于意见”,因为这取决于个人意见..好吧,也许..

类似的问题(嗯......这个确切的问题)已经被问及并回复here我发现自己同意接受的答案,在本评论中总结:

  

完全!当且仅当函数前提条件(关于参数的假设)被破坏时抛出异常! - @Lightman

在您的情况下,如果违反了函数的假设(您的预期参数):YES,抛出异常,因为JS没有提供任何语法构造来将函数参数设置为required

<小时/> 使用ES6,您可以使用default parameters来强制执行您想要的行为:

function missingParameterHandler() {
  throw new Error('Missing parameter');
}

function foo(aRequiredParameter = missingParameterHandler()) {

  // Use your required parameter
  console.log("Hello " + aRequiredParameter);
}

// Hence:
foo("World") // OK
foo()        // -> Throws exception

取自here的示例,而here您可以找到有关此功能的更多示例。

这是可以实现的,因为当aRequireParameter未被传递时,将分配默认值(在这种情况下被调用),因此将抛出异常/错误。

答案 2 :(得分:0)

这取决于。你应该几乎总是有某种错误处理,但是什么类型的处理取决于具体情况。

有时候只是抛出一个错误就好了,有时候如果你有错误的话可能会想要做些什么。

您可以使用类似try / catch的东西,或者,在这种情况下,只需检查undefined并对其执行某些操作。