动态语言,在开发模块的时候对于外部输入的参数(程序内部的数据)应该信任到什么程度?

2014-09-03 16:22:10 +08:00
 mhycy
模块指的是任何实现形式,只要满足:所需要的参数/数据不是外部人工输入的
(例如我写了个A模块,另一个程序员写了个B模块并在B模块调用了A模块的函数/方法并传入了一些数据)

在这种情况下,作为A模块,应该对输入的数据信任到何种程度?
是否应该在这个地方做异常处理/类型判断,毕竟做判断是需要消耗资源的。。。
2947 次点击
所在节点    程序员
7 条回复
pright
2014-09-03 16:37:40 +08:00
取决于你对模块调用者的能力和理智信任到什么程度
lsylsy2
2014-09-03 16:39:18 +08:00
取决于B如果传入错误数据,产生的问题谁负责
假如你俩是一个部门的,那么优先性能,传错误数据是他的事情
假如B是你的客户,你写了个SDK给他,那么即使他传了错误的数据,你不能出现连锁反应的错误。
eriale
2014-09-03 16:39:47 +08:00
反正出来问题会抛出异常,发现再改也来得及。
mhycy
2014-09-03 16:46:09 +08:00
@lsylsy2
SDK应该算是API吧?那种情况在我看来是应该至少对所有输入数据进行类型检查的。
数据合理性检查就看情况而定了

即使是同部门开发的代码,也有可能存在一种情况:一开始的输入数据就是错的,但是所有人都忽略了对数据的处理。
这种情况下是否应该考虑呢?

@eriale 我写写异常处理经常会掉进一个坑:抛出异常,并在代码最外围进行捕获。。。
据说这不是一种好办法。。但是在我看来在代码内处理这个问题增加了无用的开销也不是一种好办法。。
不知实际该如何应对?
cxxrocks
2014-09-03 16:53:40 +08:00
我的建议是:
要看用的动态语言是否符合鸭子模型

符合->不做检查
不符->检查

怎么样?
ipconfiger
2014-09-03 16:55:42 +08:00
好歹还是assert一下嘛,调试也方便撒
eriale
2014-09-03 18:03:02 +08:00
@mhycy 我自己是希望在异常发生的地方做对应的处理。如果是开发API,就应该按照你说策略,不光要对数据做检查,还必须返回错误。
lz可以参考一下github的API,看看是怎么做类型检查和错误消息返回的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/131518

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX