0

在大多数情况下,我正在开发的库将由一个或多个项目在内部使用。考虑到这一点,我应该添加对我编写的函数的所有参数执行类型检查的逻辑,对某些参数还是没有?我觉得进行选择性类型检查会给 API 带来一种不一致的感觉,对所有参数进行检查会使代码膨胀,而对任何参数都进行检查可能会导致无用的错误消息。任何关于为什么或为什么不的指导将不胜感激。

4

3 回答 3

2

首先,记录您的 API 很重要,即使它仅供内部使用。如果您在几年后需要您的代码,它会派上用场。

在本文档中,您可以告诉用户参数应该是什么类型。一个常用的文档工具是doxygen

/**
* \brief Converts a string into a DummyObject
* \param str should be a valid string
*/
function str_to_dummy(str) {

}

/**
* \brief Converts an object into a DummyObject
* \param jsobj should be an object which contains at least
*        the following attibutes: 'height','length', 'size'
* \example json_to_dummy({'height': 12,'length': 15,'size': 11});
*/
function json_to_dummy(jsobj) {

}

请记住,无论哪种方式,用户都会遇到错误消息:

参数 'o' 必须是具有属性 'height' 的对象

或者

ReferenceError:o.height 未定义

虽然得到更详细的错误是件好事,但如果您正确记录 API,则通常没有必要。

于 2012-12-04T08:22:23.267 回答
1

我想这一切都取决于您希望如何处理库中的错误。你能接受有人向你传递无效类型的参数的事实吗(尽管我假设文档清楚地说明了他/她应该传递什么)?如果您对此感到满意,我会跳过类型检查以节省库大小。

毕竟,如果有人想篡改它,那只是客户端的javascript。你对此无能为力。

于 2012-12-04T08:26:44.037 回答
-1

我认为您(几乎)总是应该检查或转换函数参数。
我只是有smth。像昨天这样:

foo("1");  

function foo(myVar)  
{  
  return myVar+2;  
}    

所以你应该小心。我相信这是一个很好的理由。

于 2012-12-04T08:24:56.747 回答